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

时间:2012-03-01 14:42:03

标签: c# asp.net sql 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();
    }

7 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

这里有两个选项:

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

@MiddleInitial nvarchar(10) = NULL

或者在代码中添加以下行:

cmd.Parameters.AddWithValue("@MiddleInitial", null);

答案 2 :(得分:3)

尝试传入DBNull.Value而不是null

答案 3 :(得分:1)

你需要在所有事情上声明 - 即使它是空的。

DBNull.Value用于MiddleInitial

cmd.Parameters.AddWithValue("@MiddleInitial",DBNull.Value);

答案 4 :(得分:1)

我创建了一个扩展方法来解决这个问题。如果您可以更新存储过程,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);
    }
}

答案 5 :(得分:0)

使用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();
    }

答案 6 :(得分:0)

嘿,你必须设置商店程序

@MiddleInitial varhcar(8) = null