0的C#SqlParameter更改为';默认值';
我们正在将一个较旧的C#应用程序迁移到最新版本的C#(和.NET framework),在测试过程中遇到了一个问题。没有什么惊天动地的-只是基本的数据访问代码 具体来说,我们正在创建一个名为“@BalanceForward”的SqlParameter。在这种特殊情况下,我们将该值设置为零-尽管它可能是其他值。执行存储过程时,我们返回一个错误,该过程需要一个名为“@BalanceForward”的参数,但未指定该参数。奇怪 我们运行了一个SQL跟踪,并看到以下内容 exec usp_事务_创建@Id='dummy value',@BalanceForward=default 如您所见,零美元金额在幕后被更改为“默认”。这一定是.NET framework行为上的变化——从仍在生产中的版本查看SQL跟踪,零美元金额传递为0.000的C#SqlParameter更改为';默认值';,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我们正在将一个较旧的C#应用程序迁移到最新版本的C#(和.NET framework),在测试过程中遇到了一个问题。没有什么惊天动地的-只是基本的数据访问代码 具体来说,我们正在创建一个名为“@BalanceForward”的SqlParameter。在这种特殊情况下,我们将该值设置为零-尽管它可能是其他值。执行存储过程时,我们返回一个错误,该过程需要一个名为“@BalanceForward”的参数,但未指定该参数。奇怪 我们运行了一个SQL跟踪,并看到以下内容 exec usp_事务_创建@I
有没有办法禁用它,让它传递实际值而不是“默认值”?我们真的不想通过数百个存储过程来解释可能发生这种情况的可能性 我们正在使用此代码
cmd.Parameters.Add(DataFactory.CreateParameter("@BalanceForward", 0));
public static DbParameter CreateParameter(string name, object value)
{
DbParameter param = _dataFactory.CreateParameter();
param.ParameterName = name;
if (value == null)
param.Value = DBNull.Value;
else
param.Value = value;
return param;
}
然而,我们现在偶然发现了AddWithValue选项,该选项是在某个点添加到SqlParameter对象的。我们一直在使用抽象DbCommand、DbConnection、DbParameter等对象,并通过app.config设置传入提供程序
从抽象版本切换到SqlParameter对象并使用AddWithValue选项解决了这个问题。现在-问题是如何使用DbParameter对象,将所有抽象代码转换为System.Data.SqlClient版本,或者修改所有存储过程。如果没有触发此错误的代码,很难说什么。非常确定这个基本功能没有被更改,否则……您如何设置参数的值?看见