【问题标题】:how to pass sql parameter as null value in integer datatype variable?如何在整数数据类型变量中将 sql 参数作为空值传递?
【发布时间】:2011-03-16 05:34:48
【问题描述】:

如何将sql参数作为空值传递给整数数据类型变量?

        StockBO sBO = new StockBO();
        sBO.Mode = 2;
        if (ddcmpanyname.SelectedIndex != 0)
        {
            sBO.Client_id = Convert.ToInt16(ddcmpanyname.SelectedValue);
        }
        else
        {
            sBO.Client_id = Convert.ToInt16(DBNull.Value);//Object cannot be cast from DBNull to other types.
       sBO.Client_id =DBNull.Value;//Cannot implicitly convert type 

        }
        ds=_StockController.StockGet(sBO);

我改变了这样的代码,它给出了错误,就像我的评论检查其他部分一样

【问题讨论】:

    标签: c# types integer sqlparameter


    【解决方案1】:

    您的意思并不完全清楚。如果您尝试在 SQL 参数中传递空值,您应该使用 DBNull.Value 作为您的 SqlParameter(或您正在使用的任何类型)的值。如果您想在 C# 中表示一个可为空的整数,请使用 int?(或 Nullable<int> - 它们是相同的)。

    您不能将空值存储在普通的不可空值类型变量中。可空值类型仍然是结构,但它们包装了不可空类型并添加了一个布尔值来指示它是“真实”值还是空值。 C# 在其周围添加了语法糖,允许您使用 null 文字进行赋值、各种转换、提升运算符等:

    int? value = 5;
    value = null;
    if (value == null)
    {
        ...
    }
    

    如果这没有帮助,请向我们提供有关您正在尝试做什么的更多信息。

    编辑:好的,所以看起来StockBO.Client_id 应该是short? 类型——但是这样就不允许直接设置DBNull.Value。您应该使用null 将客户端ID 设置为空值。每当您在对象和 SQL 参数和结果之间进行转换时,您都需要自己执行这种转换 - 如果您发现自己经常这样做,请制定一些帮助方法以使其更容易。

    当然,如果您开始使用 LINQ to SQL 或类似的东西,您无需担心DBNull.Value - LINQ 提供程序倾向于直接支持可空值类型。

    【讨论】:

    • 我很高兴看到帖子..谢谢我更新了我的问题,请检查一下
    【解决方案2】:

    从 SQL 到 C# >

    int number;
    Int32.TryParse(paramvalue, out number);
    

    从 C# 到 SQL >

    将 DBNull 添加到您的参数中

    【讨论】:

      【解决方案3】:

      试试DBNull.Value;比如:

      dbParamId.Value = (object)MyID ?? DBNull.Value;
      

      【讨论】:

        【解决方案4】:

        考虑到 ParamValue 包含作为整数或 DBNull.Value 的查询结果,我将它转换为 int? 这样:

        var Result = ParamValue as int?;
        

        要确定 Result 是否为空,请检查 Result.HasValue。否则,将其用作通常的整数或 Result.Value

        【讨论】:

          【解决方案5】:

          试试这个,

          else
              {
                  sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
              }
          

          【讨论】:

            【解决方案6】:

            最好直接赋值 DBNull.Value 像:

            sBO.Client_id = DBNull.Value

            DBNull.Value 适用于所有对象

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-05-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-10-29
              • 1970-01-01
              • 2016-12-09
              相关资源
              最近更新 更多