首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >出现了DBNull错误

出现了DBNull错误
EN

Stack Overflow用户
提问于 2013-07-05 12:24:56
回答 3查看 1.1K关注 0票数 0

我有一个数据库表

代码语言:javascript
复制
FruitCrateTable FruitCrateID, FruitCrateName, FruitGarden

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

代码语言:javascript
复制
CREATE procedure [dbo].[GetFruitCrate]
(
    @FruitCrateID int,
    @FruitCrateName varchar(222)
)
AS

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

现在,当我试图检查FruitGarden是否为null或不使用DataAccess时,

我创建了行实例,

代码语言:javascript
复制
 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 }

错误,

代码语言:javascript
复制
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时,我得到了错误运算符'!=‘不能应用于'string’和'System.DBNull‘类型的操作数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-05 12:28:49

DBNullnull不一样。试着

代码语言:javascript
复制
if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) && 
     fruitCrateRow.FruitGarden != "")
票数 4
EN

Stack Overflow用户

发布于 2013-07-05 12:28:38

好吧,正如例外情况所述,fuitCraterow.FruitGardenDBNull,它不能转换成字符串(当调用string.IsNullOrEmpty时发生)

所以..。DbNull测试

代码语言:javascript
复制
if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) && 
   !string.IsNullOrEmpty(fruitCraterow.FruitGarden))

要检查DbNull,请参阅msdn

若要计算数据库字段以确定其值是否为DBNull,可以将字段值传递给DBNull.Value.Equals方法。但是,这种方法很少使用,因为有许多其他方法来评估数据库字段是否丢失数据。这些方法包括Visual函数、Convert.IsDBNull方法、DataTableReader.IsDBNull方法、IDataRecord.IsDBNull方法和其他几种方法。

所以

代码语言:javascript
复制
if (!Convert.IsDBNull(fruitCrateRow.FruitGarden) && 
     !string.IsNullOrEmpty(fruitCrateRow.FruitGarden)

也应该没问题。

编辑

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

票数 6
EN

Stack Overflow用户

发布于 2013-07-05 12:30:27

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

代码语言:javascript
复制
if (fruitCrateRow.FruitGarden != DbNull.Value)
            {
//do something but i am getting error, how can i fix this issue ?

因为它是数据库null。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17488854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档