C#ASP.Net Parameters.AddWithValue拒绝参数的空值
我正在使用存储过程填充表。 该表允许名称的中间首字母’null’,但我收到以下错误消息:
过程或函数’uspInsertPersonalAccountApplication’需要参数’@MiddleInitial’,它未提供。
提前致谢!
public void ProcessForm(string[] InputData) { string ConnString = System.Configuration.ConfigurationManager.ConnectionStrings["AssociatedBankConnectionString"].ToString(); SqlConnection conn = new SqlConnection(ConnString); SqlCommand cmd = new SqlCommand("uspInsertPersonalAccountApplication", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@AccountType", "Savings"); cmd.Parameters.AddWithValue("@AccountSubType", "Savings"); cmd.Parameters.AddWithValue("@ExistingCustomer","No"); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); }
这里有两个选项:
修改你的存储过程并使@MiddleInitial param可选(这当前不是可选的,这就是抛出错误的原因)
@MiddleInitial nvarchar(10) = NULL
或者在代码中添加以下行:
cmd.Parameters.AddWithValue("@MiddleInitial", null);
您可以添加到项目并使用以下扩展方法:
public static SqlParameter AddWithValueSafe(this SqlParameterCollection parameters, string parameterName, object value) { return parameters.AddWithValue(parameterName, value ?? DBNull.Value); }
尝试传入DBNull.Value
而不是null
。
你需要声明一切 – 即使它是空的。
对于MiddleInitial
使用DBNull.Value 。
cmd.Parameters.AddWithValue("@MiddleInitial",DBNull.Value);
我创建了一个扩展方法来解决这个问题。 如果您可以更新存储过程,Marcin的建议也值得考虑。
cmd.Parameters.AddString("@MyParamName", myValue); public static class SQLExtension { public static void AddString(this SqlParameterCollection collection, string parameterName, string value) { collection.AddWithValue(parameterName, ((object)value) ?? DBNull.Value); } }
使用Null值添加MiddleInitial的参数
public void ProcessForm(string[] InputData) { string ConnString = System.Configuration.ConfigurationManager.ConnectionStrings["AssociatedBankConnectionString"].ToString(); SqlConnection conn = new SqlConnection(ConnString); SqlCommand cmd = new SqlCommand("uspInsertPersonalAccountApplication", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@AccountType", "Savings"); cmd.Parameters.AddWithValue("@AccountSubType", "Savings"); cmd.Parameters.AddWithValue("@ExistingCustomer","No"); cmd.Parameters.AddWithValue("@MiddleInitial",DBNull.Value); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); }
嘿,你必须设置存储过程
@MiddleInitial varhcar(8) = null