【发布时间】:2013-10-07 19:23:09
【问题描述】:
我已经从一个 SELECT 存储过程中执行了一个 SqlDataReader,并且我持有这些值,其中一些可能是空的……我不知道。我正在尝试将这些值传递到 INSERT 存储过程的参数中。
当我尝试传递值时收到此错误:
"过程或函数 'insbuRenewal' 需要参数 '@TransactionID',未提供"
我的代码:
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();
}
【问题讨论】:
-
因为你试图在c#中插入
null,这里需要插入DBNull.Value。 -
如果你也包含存储过程会很有帮助
-
我相信要做到这一点,存储过程中的参数必须有一个默认值。您是否有权查看代码?见weblogs.asp.net/rmclaws/archive/2004/02/18/75381.aspx
-
您真的需要
.ToStringOrNull()函数吗?如果reader["ApplicationID"]的值已经是DbNull.Value,那么它将被传递。 -
代码不完整。您在哪里调用 ExecuteNonQuery?你在哪里定义参数?请出示完整的相关代码