【问题标题】:How do I pass a null value to a SqlDataSource that is using a stored procedure?如何将空值传递给使用存储过程的 SqlDataSource?
【发布时间】:2011-11-04 14:23:05
【问题描述】:

使用 .NET 4 和 C#。所有这些都会引发错误:

sdsTypeinfo.SelectParameters.Add("@TypeCode", DbType.Boolean, DBNull.Value);

sdsTypeinfo.SelectParameters.Add("@TypeCode", DBNull.Value);

sdsTypeinfo.SelectParameters.Add("@TypeCode", null);

sdsTypeinfo.SelectParameters.Add("@TypeCode", "");

该错误表明该过程根本没有获得任何值。

Procedure or function 'Typeinfo' expects parameter '@TypeCode', which was not supplied.

回答

参数名称中不需要@。这与使用 SqlCommand 调用存储过程时添加参数不同,在这种情况下,您需要如下所示:

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

另外,DBNull.value 在上面是一个可接受的参数,但是在将 SelectParameters 添加到 SqlDataSource 时,可接受的 NULL 值只是“null”。

【问题讨论】:

  • 它会抛出什么样的错误?在 Sql 服务器端还是客户端?究竟是什么错误信息?
  • 是错字吗?该错误期望参数被称为@pTypeCode,而您正在传递@TypeCode...

标签: c# asp.net stored-procedures


【解决方案1】:

添加参数时应该有一个选项可以将空字符串转换为null。

<SelectParameters>
    <asp:ControlParameter ControlID="lstCategories" Name="ProductSubcategoryID" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
</SelectParameters>

由于您使用的是存储过程,因此您需要将参数设为可选:

@SomeParm INT = NULL

【讨论】:

    【解决方案2】:

    你可以这样试试……

        string x = null;
    command.Parameters.AddParameter(
         new SqlParameter("@column", (object)x ?? DBNull.Value);
    

    会给你一个值为 DBNull.Value 的参数,但是

    string x = "A String";
    command.Parameters.AddParameter(
         new SqlParameter("@column", (object)x ?? DBNull.Value);
    

    【讨论】:

      【解决方案3】:

      在您的存储过程中,将参数设置为一个值,例如

      @TypeCode = '' 
      

      或者如果它是一个 int

      @typecode = 1
      

      等你明白了。

      【讨论】:

      • 我无法控制存储过程。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2016-01-09
      • 1970-01-01
      相关资源
      最近更新 更多