2013-01-02 155 views
0

我正在检查是否发生DBNull。DBNull抛出一个错误

C#代码:

tbDuration.Text = (string)MyReader["TDuration"]==DBNull?"":(string)MyReader["TDuration"]; 

但我得到的DBNull的错误:

错误4 'System.DBNull' 是 '型',而是使用类似 '变量' C: \ Visual Studio

如何检查DBNull?

问候

+1

注意,你可以只使用'tbDuration.Text = MyReader [ “TDuration”]的ToString();'为DBNull.Value转换为空字符串这条路。 –

+0

会给它一个去感谢。 – TeaDrinkingGeek

+0

现在得到一个不能隐式地将类型'object'转换为'string'。有一个明确的转换(你是否缺少一个转换?) – TeaDrinkingGeek

回答

2

DBNull是一种类型。您正在寻找的是该类型的静态成员:DBNull.Value。事情是这样的:

tbDuration.Text = MyReader["TDuration"] == DBNull.Value ? "" : (string)MyReader["TDuration"]; 

注:你也不想转换为string用于比较的目的。 DBNull.Value将适用于MyReader[]的实际结果,但如果您投了它,则不会。在验证它不是null之后,就可以投射它。

+1

除了第一个转换为字符串 - 这将失败的DBNull。 –

+0

是的,现在得到一个运算符'=='不能应用于类型'字符串'和'System.DBNull'的操作数 – TeaDrinkingGeek

+0

@HansKesting:啊,好的。现在解决答案。 – David

3

使用DBNull.Value用于检查空值。

tbDuration.Text = 
MyReader["TDuration"]==DBNull.Value?"":(string)MyReader["TDuration"] 

或者,你可以使用:

tbDuration.Text = 
DBNull.Value.Equals(MyReader["TDuration"]) ?"":(string)MyReader["TDuration"] 
0

System.DbNull.Value,是的System.DbNull实例的有效参考。

因此,您可以检查DBNull的静态值属性。

所以应该DbNull.Value不仅DbNull

(string)MyReader["TDuration"]==DBNull.Value?"":(string)MyReader["TDuration"];