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