2013-07-09 88 views
2

我试图避免使用0的数据库空值,如果它不为null,则获取原始值。DBNULL.Value始终返回True从数据库获取值

但我有一些问题。

这里是我的示例代码:

int Value = 0; 
    for(int i = 0; i < tblValue.Rows.Count; i++) 
    { 
     if (tblValue.Rows[i][""]== DBNull.Value)//Here it always returns true.. even there are values at Position 1 and 
     { 
     Value += 0;       
     } 
     else 
     { 
     Value += Convert.ToInt32(tblValue.Rows[i][""]); 
     } 

    } 

任何想法?

我检查DBNUll值错误的方式?

+6

你为什么要检查一个空名称的列?这对我来说看起来不对。(你为什么还要用'Value + = 0'? –

+2

你正在索引一个空列“”。当然你想这样做?你是什么r数据库查询,还是返回哪些列?顺便说一句,检查你是否不想在数据库中使用'SELECT SUM(COLUMNNAME)FROM XXX'自行创建这个总和。总和将更有效率这种方式 – saamorim

+0

这只是一个示例代码。我在我的实际代码中有列名。 – dnts2012

回答

1

是的。尝试(DBNull.Value.Equals(tblValue.Rows [I] [ “”]);

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

+0

谢谢,但它没有奏效。我得到了同样的结果。它返回了我的位置1空值我在哪里知道db值不为空。:( – dnts2012

+1

因此,如果这不起作用,并且您试图替换空值的值,请在SQL语句中尝试它: 代替: “从麋选择美洲驼”做: “选择COALESCE(美洲驼,0)麋” 如果美洲驼为null,这将与0 – jgriffin

1

尝试这样的:

int Value = 0; 
for(int i = 0; i < tblValue.Rows.Count; i++) 
{ 
    if (!IsDBNull(tblValue.Rows[i][""])) 
    { 
     Value += Convert.ToInt32(tblValue.Rows[i][""]); 
    } 
} 

这仅当数据库值递增Value可变NOT NULL

+0

C#替换它不具有模块功能,如VB.NET does afaik .... – Alxandr

+0

@Alxandr - [C#Convert.IsDBNull方法的MSDN文档](http://msdn.microsoft.com/en-us/library/system.convert.isdbnull.aspx?cs- save-lang = 1&cs-lang = csharp#code-snippet-1) –

+0

是的,这很好,但它仍然意味着你的代码是无效的(因为,它不会编译),不是? – Alxandr