【问题标题】:DBNull error is coming upDBNull 错误即将出现
【发布时间】:2013-07-05 20:57:55
【问题描述】:

我有一个数据库表

FruitCrateTable FruitCrateID, FruitCrateName, FruitGarden

现在我还创建了一个存储过程,

CREATE procedure [dbo].[GetFruitCrate]
(
    @FruitCrateID int,
    @FruitCrateName varchar(222)
)
AS

SELECT 
    *
FROM 
    FruitCrateTable
WHERE
    FruitCrateID = @FruitCrateID
and
    FruitCrateName = @FruitCrateName 

现在,当我尝试使用 DataAccess 检查 FruitGarden 是否为空时,

我创建了行实例,

 public myDataAccess.DataAccess.GetFruitCrateRow fruitCrateRow;
 //then

 if (!string.IsNullOrEmpty(fruitCrateRow.FruitGarden))
            {
//do something but i am getting error, how can i fix this issue ?
else { // do something else }

错误,

The value for column &#39;FruitGarden&#39; in table &#39;GetFruitCrate&#39; is DBNull.</message><full>System.Data.StrongTypingException: The value for column &#39;FruitGarden&#39; in table &#39;GetFruitCrate&#39; is DBNull. ---&gt; System.InvalidCastException: Unable to cast object of type &#39;System.DBNull&#39; to type &#39;System.String&#39;.

我将 Fruit Garden 设为 Null,因为它可以为 null

更新

当我尝试fruitCrateRow.FruitGarden != DBNull.Value 时,我得到错误运算符'!=' 不能应用于'string' 和'System.DBNull 类型的操作数

【问题讨论】:

  • 您的存储过程是[dbo].[GetFruitCrate],但您调用的是GetFruitCrateRow
  • @PatLillis 我重命名了我的场景

标签: c# asp.net sql


【解决方案1】:

好吧,正如 Exception 所述,fuitCraterow.FruitGardenDBNull,不能转换为字符串(当您调用 string.IsNullOrEmpty 时会发生这种情况)

所以...测试DbNull

if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) && 
   !string.IsNullOrEmpty(fruitCraterow.FruitGarden))

要检查 DbNull,请参阅 msdn

评估数据库字段以确定它们的值是否 DBNull,可以将字段值传递给 DBNull.Value.Equals 方法。但是,这种方法很少使用,因为有很多 评估缺失数据的数据库字段的其他方法。这些 包括 Visual Basic IsDBNull 函数、Convert.IsDBNull 方法,DataTableReader.IsDBNull 方法,IDataRecord.IsDBNull 方法,以及其他几种方法。

所以

if (!Convert.IsDBNull(fruitCrateRow.FruitGarden) && 
     !string.IsNullOrEmpty(fruitCrateRow.FruitGarden)

应该没问题。

编辑

您仍然可以在 DBNull 测试之后添加您的 string.IsNullOrEmpty 测试,因为只有当左侧部分为真时才会对其进行评估。

【讨论】:

  • 当我尝试fruitCrateRow.FruitGarden != DBNull.Value 我得到错误运算符'!='不能应用于'string'和'System.DBNull类型的操作数
  • @user13814 你是对的,已更正和编辑(但克劳迪奥·雷迪已经更正了)
【解决方案2】:

DBNullnull 不同。试试

if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) && 
     fruitCrateRow.FruitGarden != "")

【讨论】:

    【解决方案3】:

    您需要检查而不是string.isNullOrEmpty

    if (fruitCrateRow.FruitGarden != DbNull.Value)
                {
    //do something but i am getting error, how can i fix this issue ?
    

    因为它是一个数据库空值。

    见: What is the difference between null and System.DBNull.Value?

    和: http://msdn.microsoft.com/en-us/library/system.dbnull.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多