【问题标题】:DBNull warnings when performing stored procedure执行存储过程时的 DBNull 警告
【发布时间】:2011-02-21 08:25:49
【问题描述】:

我的数据库中的一列(双精度型)有一些空值。 我正在执行一个排序程序来获取我的应用程序中的数据

 wipDBTableAdapters.XLSFacturiTableAdapter TAFacturi = new wipDBTableAdapters.XLSFacturiTableAdapter();
               var dtfacturi = TAFacturi.GetData(CodProiect);

然后我尝试做这样的事情:

if (dtfacturi[i].CANTITATE == null)
   {
    //do something
   }

这是一个警告:

The result of the expression is always 'false' since a value of type 'double' is never equal to 'null' of type 'double?

但是,当我运行我的代码时,出现以下异常:

StrongTypingException
The value for column 'CANTITATE' in table 'XLSFacturi' is DBNull. 

我应该如何解决这个问题?

【问题讨论】:

    标签: c# strongly-typed-dataset


    【解决方案1】:

    在处理 DB 中的数据并需要检查 NULL 值时,请使用 DBNull 类而不是 .NET null。

    【讨论】:

    • 不幸的是,我得到了与 DBNull 相同的结果,我想我将添加一个存储过程,将数据库中的 null 替换为 0。
    【解决方案2】:

    数据库 NULL 与 null 不同,您应该使用 IsDBNull 来检查数据库 NULL。

    编辑:将 VB.Net 与 C# 混合

    DBNull.Value 比较,而不是VB 特定的IsDBNull

    【讨论】:

      【解决方案3】:

      试试这个:

      if (dtfacturi[i].CANTITATE == DBNull.Value)
      {
        //do something
      }
      

      【讨论】:

        【解决方案4】:

        'double' 类型的值确实永远不会为空;如果要导出到双精度数组,则需要在数据库中有两列,一列包含数据,另一列包含数据是否有效的标志。

        这确实是您的数据库到数组适配器代码中的一个错误;我找不到任何 XLSFacturiTableAdapter 的 Google 搜索结果,所以我不知道该对谁大喊大叫。

        【讨论】:

          【解决方案5】:

          DBNull 不是null

          查看DBNull documentation on MSDN

          试试这个测试:

          if (DBNull.Value.Equals(dtfacturi[i].CANTITATE))
          {
              //do something
          }
          

          【讨论】:

            【解决方案6】:

            使用 TypedDataSets 时,以这种方式检查 coloumn 是否为空。

               if (dtfacturi[i].IsCANTITATENull()) 
               { 
                   //do something 
               } 
            

            另请注意,C# null 与 Database null 不同。您的列的类型是 double ,这是一个永远不能为空的值类型。为了检查您的列值是否为空,您需要将其与 DBNull.Value 进行比较。

            【讨论】:

              猜你喜欢
              • 2021-08-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-10-14
              • 1970-01-01
              • 2010-09-15
              • 1970-01-01
              相关资源
              最近更新 更多