DBNull错误即将出现

时间:2013-07-05 12:24:57

标签: c# asp.net sql

我有一个数据库表

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是否为null时,

我创建了row的实例,

 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;.

我将水果花园留空,因为它可以为空

更新

当我尝试fruitCrateRow.FruitGarden!= DBNull.Value我得到Error Operator'!='不能应用于'string'和'System.DBNull

类型的操作数

3 个答案:

答案 0 :(得分:6)

好吧,正如异常所述,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测试,因为仅当左侧部分为真时才会对其进行评估。

答案 1 :(得分:4)

DBNullnull不同。试试

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

答案 2 :(得分:0)

而不是string.isNullOrEmpty你需要检查:

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

因为它是一个数据库null。

请参阅: What is the difference between null and System.DBNull.Value?

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