我使用存储过程填充表。该表允许名称的中间首字母'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();
}
答案 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