我已经从一个 SELECT 存储过程中执行了一个 SqlDataReader,并保存了这些值,其中一些值可能为空...而我并不知道。我正在尝试将这些值传递到 INSERT 存储过程的参数中。
当我尝试传递值时收到此错误:
"Proccedure or function 'insbuRenewal' expects parameter '@TransactionID', which was not supplied"
我的代码:
try
{
while (reader.Read())
{
insbuRenewal.Parameters["@SolarID"].Value = (decimal)reader["SolarID"];
insbuRenewal.Parameters["@ApplicationID"].Value
= reader["ApplicationID"].ToDecimalOrNull();
insbuRenewal.Parameters["@TransactionID"].Value
= reader["TransactionID"].ToStringOrNull();
insbuRenewal.Parameters["@Host"].Value
= reader["Host"].ToStringOrNull();
public static string ToStringOrNull(this object items)
{
if (items == null || items == DBNull.Value)
{
return null;
}
return items.ToString();
}
最佳答案
如果你这样做,你可以使用你拥有的方法:
insbuRenewal.Parameters.AddWithValue("@TransactionID",
reader["TransactionID"].ToStringOrNull());
代替:
insbuRenewal.Parameters["@TransactionID"].Value =
reader["TransactionID"].ToStringOrNull();
AddWithValue
接口(interface)对于您的所有 参数来说是一种更好的方法。不要预先添加它们;按需添加。
正如 Yosi 指出的那样。您真正需要的是:
insbuRenewal.Parameters.AddWithValue("@TransactionID", reader["TransactionID"]);
关于c# - INSERT 存储过程不接受空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232889/