2016-05-04 16 views
2

我试图创建一个方法,该方法从我的数据库返回满足我的条件的字符串。如何使用数据读取器C发现空的访问字段#

第一个条件是工作。 但是,第二个条件是访问中的部分条目是空的,至少有一个字段。

这是我的代码:

OleDbCommand datacommand = new OleDbCommand(); 
datacommand.Connection = dataConnection; 
datacommand.CommandText = "SELECT numNumber, numLocation " + 
          "FROM  tblNumbers " + 
          "ORDER BY numID "; 
OleDbDataReader dataReader = datacommand.ExecuteReader(); 
while (dataReader.Read()) 
{ 
    if (MatchServiceLetters(dataReader.GetString(0))) // && dataReader.GetInt32(1) == null?/) 
} 
return dataReader.GetString(0); 

如果整型字段为空,null的比较是不工作。所以我怎么知道它是否是空的?

+1

'DBNull'是你的朋友。 – t0mm13b

+1

你可以使用IsNull:ISNULL(check_expression,replacement_value) – Sorceri

+0

t0mm13b你是我的英雄。 –

回答

0

从MSDN:

不会进行任何转换;因此,检索的数据必须已经是32位有符号整数。 调用IsDBNull在调用此方法之前查找空值。

,因此会使用:

if(!dataReader.IsDBNull(1)) 
{ 
    return dataReader.GetInt32(1); 
} 
else 
{ 
    return 0; // or better yet, make your method return Nullable<int> 
} 
+1

你可以用IsNull(numNumber,0)来代替所有这些,并且它全部由SQL – Sorceri

+0

@Sorceri处理,这是真的,但是你开始在那里混合关注。 sprocs被重复使用并不罕见,如果NULL是该列的有效值,则可能会产生问题。通常,使用魔术值来表示缺失的数据并不是一个好主意(因此建议使用Nullable类型)。 – DVK

相关问题