C#ASP.Net Parameters.AddWithValue拒绝参数的空值

Sus*_*san 7 c# sql asp.net stored-procedures

我使用存储过程填充表.该表允许名称的中间首字母'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();
    }
Run Code Online (Sandbox Code Playgroud)

Yur*_*kiy 5

您可以添加到项目并使用以下扩展方法:

public static SqlParameter AddWithValueSafe(this SqlParameterCollection parameters, string parameterName, object value)
{
    return parameters.AddWithValue(parameterName, value ?? DBNull.Value);
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*cin 4

这里有两个选项:

修改您的存储过程并使@MiddleInitial参数可选(当前不是可选的,这就是抛出错误的原因)

@MiddleInitial nvarchar(10) = NULL
Run Code Online (Sandbox Code Playgroud)

或者将以下行添加到您的代码中:

cmd.Parameters.AddWithValue("@MiddleInitial", null);
Run Code Online (Sandbox Code Playgroud)

  • 请参阅 http://stackoverflow.com/a/9518215/8479 的评论:使用 `cmd.ParametersAddWithValue("@MiddleInitial", (object)yourVal ?? DBNull.Value);` 或添加扩展方法,例如 `AddParamWithValueOrNull() ` (3认同)
  • 我尝试了 AddWithValue("@param", null); 这不起作用。在存储过程中设置默认值(即@param datetime = null)修复了它。 (2认同)