如何检查数据读取器是否为空或为空
我有一个数据读取器,它从 sql server 数据库返回一组记录。 我的数据库中有一个名为“附加”的字段。 该字段 50% 的时间为空或为 null。
我正在尝试编写代码来检查该字段是否为空。 这背后的逻辑是: 如果“其他”字段包含文本,则显示信息,否则隐藏该字段。
我已经尝试过:
if (myReader["Additional"] != null)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
上面的代码给了我这个错误:
异常详细信息:System.IndexOutOfRangeException:附加
任何帮助将不胜感激...
另请参阅:
I have a datareader that return a lsit of records from a sql server database. I have a field in the database called "Additional". This field is 50% of the time empty or null.
I am trying to write code that checks if this field isnull. The logic behind this is:
If the field "Additional" contains text then display the info otherwise hide the field.
I have tried:
if (myReader["Additional"] != null)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
The above code gives me this error:
Exception Details: System.IndexOutOfRangeException: Additional
Any help would be greatly appreciated...
See Also:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
我已经 3 年多没有使用 DataReaders,所以我想确认我的记忆并找到了这个。 无论如何,对于像我一样看到这篇文章并想要一种使用列名而不是序号来测试 IsDBNull 的方法的人,并且您正在使用 VS 2008+(我认为是 .NET 3.5),您可以编写一个扩展方法,以便您可以将列名称传递给:
Kevin
I haven't used DataReaders for 3+ years, so I wanted to confirm my memory and found this. Anyway, for anyone who happens upon this post like I did and wants a method to test IsDBNull using the column name instead of ordinal number, and you are using VS 2008+ (& .NET 3.5 I think), you can write an extension method so that you can pass the column name in:
Kevin
这是正确且经过测试的解决方案
This is the correct and tested solution
我还使用 OleDbDataReader.IsDBNull()
I also use OleDbDataReader.IsDBNull()
首先,您可能想要检查
DBNull
而不是常规的Null
。或者您可以查看
IsDBNull
方法First of all, you probably want to check for a
DBNull
not a regularNull
.Or you could look at the
IsDBNull
method除了给出的建议之外,您还可以直接从查询中执行此操作,如下所示 -
这样您可以编写条件来检查字段值是否为 < 0 或 >= 0。
In addition to the suggestions given, you can do this directly from your query like this -
This way you can write the condition to check whether the field value is < 0 or >= 0.
@Joe Phillips
SQlDataReader.IsDBNull(int index) 需要列的序号。 有没有办法使用列名而不是序数来检查空值?
@Joe Philllips
SQlDataReader.IsDBNull(int index) requires the ordinal number of the column. Is there a way to check for nulls using Column Name, and not it's Ordinal Number?
尝试这个更简单的等效语法:
Try this simpler equivalent syntax:
我也遇到过这种问题,但是我的,我使用 DbDataReader 作为我的通用阅读器(用于 SQL、Oracle、OleDb 等)。 如果使用 DataTable,DataTable 有这个方法:
使用这个方法我可以确定该列是否存在于我的查询的结果集中。 我也在寻找 DbDataReader 是否具有此功能。
I also experiencing this kind of problem but mine, i'm using DbDataReader as my generic reader (for SQL, Oracle, OleDb, etc.). If using DataTable, DataTable has this method:
using this I can determine if that column is existing in the result set that my query has. I'm also looking if DbDataReader has this capability.
这个
例子:
This
Example:
最好在查询中完成此操作。 但是,如果查询绑定到其他函数,而不是在 while 循环中检查 DBNull.Value 将解决该问题。
Best thing to get this done in query. However, if query bond to other functions than checking DBNull.Value in while loop would address the issue.
AMG - 抱歉,我正在享受金发时刻。 在我最初设计数据库后,“附加”字段被添加到数据库中。
我更新了所有代码以使用这个新字段,但是我忘记更新调用选择数据库字段的实际数据读取器代码,因此它没有调用“附加”
AMG - Sorry all, was having a blond moment. The field "Additional" was added to the database after I had initially designed the database.
I updated all my code to use this new field, however I forgot to update the actual datareader code that was making the call to select the database fields, therefore it wasn't calling "Additional"