如何使用数据读取器 C# 发现一个空的访问字段

Posted

技术标签:

【中文标题】如何使用数据读取器 C# 发现一个空的访问字段【英文标题】:How to spot an empty access field with data reader C# 【发布时间】:2016-05-04 19:15:07 【问题描述】:

我正在尝试创建一个方法,该方法从我的数据库中返回一个满足我条件的字符串。

第一个条件有效。 但是,第二个条件是access中的部分条目是空的,至少有一个字段。

这是我的代码:

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);

如果 int 字段为空,则与 null 的比较不起作用。那我怎么知道它是不是空的呢?

【问题讨论】:

DBNull 是你的朋友。 你可以使用 IsNull: ISNULL ( check_expression , replacement_value ) t0mm13b 你是我的英雄。 【参考方案1】:

来自 MSDN:

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

所以你会使用:

if(!dataReader.IsDBNull(1))

    return dataReader.GetInt32(1);

else

    return 0; // or better yet, make your method return Nullable<int>

【讨论】:

你可以用 IsNull(numNumber,0) 替换所有的,它都是由 SQL 处理的 @Sorceri 确实如此,但是您开始在那里混合关注点。重用 sproc 的情况并不少见,如果 NULL 是该列的有效值,这可能会产生问题。一般来说,使用魔法值来表示缺失数据并不是一个好主意(因此建议使用 Nullable 类型)。

以上是关于如何使用数据读取器 C# 发现一个空的访问字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 自动化从访问数据库(.accdb)中读取所有记录

如何通过c#读取oracle数据库中的long类型字段

如何使用过滤器从 C# 中的访问中选择特定字段

如何使 SSIS 脚本任务失败(使用 C#,2008)

如何检查数据读取器是不是为空或为空

如何在 C# 中使用数据读取器遍历行?