c# - INSERT 存储过程不接受空值

标签 c# .net ado.net

我已经从一个 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/

相关文章:

c# - 以编程方式检查 Windows 应用商店应用程序更新

c# - 异步世界中的故障安全处置

c# - T4 模板仅在我将它们设置为 "Debug"时运行

c# - Json.Net 序列化类名而不是内部属性

C# 继承 : change field data type and value in derived class

c# - 使用 Html.HiddenFor 将模型传递给 Controller

.net - 当CLR初始化数据结构来存储它们时,ValueType存储在哪里

c# - 与 Code First 的单向一对多关系

c# - 为什么要设置命令对象参数的大小参数呢?

c# - 在 C# 中如何使用 ExecuteNonQuery 从存储过程中获取返回值