2013-07-05 31 views
0

我有一个数据库表作为的DBNull错误快到了

FruitCrateTable FruitCrateID, FruitCrateName, FruitGarden 

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

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

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

现在,当我尝试检查,如果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;. 

我离开果园为空,因为它可以为null

更新

当我尝试fruitCrateRow.FruitGarden!= DBNull.Value我得到错误运算符'!='不能应用于类型'字符串'和'系统数据库'的操作数

+0

你的存储过程是'[DBO] [GetFruitCrate]',但你打电话'GetFruitCrateRow'? –

+0

@PatLillis我改名为我的场景 – Mathematics

回答

3

DBNullnull不一样。由于这是一个数据库空

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

:与

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

迄今为止为我工作,谢谢 – Mathematics

5

那么,作为由异常指出,fuitCraterow.FruitGardenDBNull,不能被铸造成一个字符串

所以...测试DbNull

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

检查(当你调用string.IsNullOrEmpty这恰好)统一的DBNull,看到msdn

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

所以

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

也应该罚款。

编辑

你还可以加上你string.IsNullOrEmpty测试的DBNull测试后,因为它只会如果离开的部分是真实的评价。

+0

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

+0

@ user13814你是对的,纠正和编辑(但克劳迪奥雷迪已经纠正) –