在C#中调用的存储过程如何在不提供所有可选参数的情况下正确插入数据?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在C#中调用的存储过程如何在不提供所有可选参数的情况下正确插入数据?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2028字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试使用Dapper将带有存储过程的数据从C#程序插入SQL Server数据库中.尝试执行此操作时,没有出现任何错误,但是很遗憾,某些数据被插入到错误的列中.
数据库由许多表和列组成,因此使用存储过程来正确插入数据.我已经在SQL Server本身中对存储过程进行了广泛的测试,并且可以肯定在直接在服务器上执行SQL代码时正确放置了数据.
这是调用存储过程的代码,以及存储过程脚本的一小部分.
public void AddIndividual(string genus, string species, string collection)
{
using (IDbConnection connection = new SqlConnection(connectionString: Helper.CnnVal("Rapento.Properties.Settings.Database1ConnectionString")))
{
List<Individual> individual = new List<Individual>();
individual.Add(new Individual { GivenGenusName = genus, GivenSpeciesName = species, GivenCollectionName = collection });
connection.Execute("dbo.AddIndividual @GivenGenusName, @GivenSpeciesName, @GivenCollectionName", individual);
}
}
CREATE PROCEDURE AddIndividual
@GivenGenusName varchar(255) = null,
@GivenSpeciesName varchar(255) = null,
@GivenDeterminedBy varchar(255) = null,
@GivenDeterminationDate varchar(255) = null,
....
@GivenCollectionName varchar(255) = null,
在数据库中,我可以看到GenusName和SpeciesName正确插入,但是CollectionName被插入了确定行.这不是在SQL脚本中编写的方式.引起我注意的是,DetermindBy是脚本中的第三个参数,这使我认为这些参数不是基于我给它们提供的名称而是基于它们的位置(传递它们的顺序)传递的.
所以我的问题是:如何在不传递过程中每个可选参数的情况下,将此参数插入正确的列?
希望我能给您所有您需要的信息.谢谢!
解决方法:
如上执行存储过程时:
connection.Execute("dbo.AddIndividual @GivenGenusName, @GivenSpeciesName, @GivenCollectionName", individual);
…您正在做的是提供值列表,而不是参数列表.如果要在存储过程中跳过参数,则需要指定要填充的参数的名称,如下所示(假设:参数名称与变量名称相同):
connection.Execute("dbo.AddIndividual @GivenGenusName = @GivenGenusName, @GivenSpeciesName = @GivenSpeciesName, @GivenCollectionName = @GivenCollectionName", individual);
如果仅提供值,则它们将从第一个参数开始填充参数.这就是您的查询正在执行的操作.此处的主要困惑是,您已将设置的值作为变量而不是参数进行处理.
内容总结
以上是互联网集市为您收集整理的在C#中调用的存储过程如何在不提供所有可选参数的情况下正确插入数据?全部内容,希望文章能够帮你解决在C#中调用的存储过程如何在不提供所有可选参数的情况下正确插入数据?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。