0

我有一个数据库表

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类型的操作数

4

3 回答 3

6

好吧,正如异常所述,fuitCraterow.FruitGardenisDBNull不能转换为字符串(当您调用 时会发生这种情况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)

也应该没问题。

编辑

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

于 2013-07-05T12:28:38.540 回答
4

DBNull不一样null。尝试

if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) && 
     fruitCrateRow.FruitGarden != "")
于 2013-07-05T12:28:49.757 回答
0

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

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

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

请参阅: null 和 System.DBNull.Value 有什么区别?

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

于 2013-07-05T12:30:27.173 回答