DataReader 为 null 或为空

2023-11-30

Using C#

我有一个数据读取器,它从 mysql 数据库返回记录列表。

我正在尝试编写代码来检查数据读取器是否为空。其背后的逻辑是:如果数据读取器有字段,则显示信息,否则隐藏该字段。

我努力了:

cmd1 = new OdbcCommand("Select * from tb_car where vehicleno = '" + textbox2.text  + "';", dbcon);
        dr1 = cmd1.ExecuteReader();

if (dr1["tb_car"]. != DBNull.Value) 
{ 
    textbox1.Text  = "contains data"; 
} 
else 
{
    textbox1.Text = "is null"; 
}

上面的代码给了我这个错误:

异常详细信息:System.IndexOutOfRangeException:附加

任何帮助将不胜感激...


我在这里看到一些问题...首先,您似乎正在尝试访问以下行中的表名称:

if(dr1["tb_car"] != DBNull.Value

您应该传递字段名称而不是表名称。因此,如果名为“tb_car”的表有一个名为 CarId 的字段,您可能希望代码如下所示:

if(dr1["CarId"] != DBNull.Value)

如果我是对的,那么可能不存在名为“tb_car”的字段,并且“索引超出范围”错误是因为 DataReader 正在查找名为“tb_car”的列集合中的项目但没有找到它。这几乎就是错误的含义。

其次,在检查之前,您必须先调用 DataReader 的 Read() 命令从数据库中读取一行。

所以你的代码实际上应该看起来像......

while(dr.Read())
{
   if(dr1["CarId"] != DBNull.Value)
   {
      ....

等等。

请参阅此处了解 DataReader 的正确使用方法:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx


最后,如果您只是检查表中是否有任何行,则可以忽略上述所有内容并使用HasRows财产如

if(dr.HasRows)
{
   ....

虽然如果你正在使用while(dr.Read())语法中,while 循环中的代码仅在首先有行的情况下才会执行,因此如果您不想执行任何没有结果的操作,则 HasRows 可能是不必要的。当然,如果您想返回“未找到结果”之类的消息,您仍然想使用它。

编辑 - 添加

我也觉得线路有问题

if(dr1["CarId"] != DBNull.Value)

您应该使用 DataReaderIsDbNull()方法。如

if(dr.IsDbNull("CarId"))

抱歉我第一次错过了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DataReader 为 null 或为空 的相关文章

随机推荐

  • Android 地图 API v2 中的彩色折线

    我想在 android 地图 api 版本 2 中绘制折线 我希望它有多种颜色 最好有渐变 但在我看来 折线只允许有单色 我怎样才能做到这一点 我已经有了 api v1 覆盖层来绘制我喜欢的内容 所以大概我可以重用一些代码 public c
  • 在Python中获取具有预先指定扩展名的文件基名

    我有以下字符串 path1 path2 foo bar qux txt 我想要做的是通过指定扩展名来提取基本名称 如果我将扩展定义为 bar qux txt那么基本名称是 foo 那么如果扩展名是 qux txt那么基数是 foo bar
  • Matplotlib 视频创建

    编辑 欧内斯特的重要性提供了答案 但是我仍然邀请大家解释 为什么savefig逻辑不同于animation logic 我想制作视频matplotlib 我浏览了手册和示例 但我就是不明白 关于matplotlib 我总是复制示例 因为经过
  • 关注 R 中的startsWith 和多种模式

    我注意到一个问题或疑虑startsWith 功能 以下代码显示两个不同的选择 第一个行为正常 是这样的代码块 dt test lt data table a c abcd poo abla ba id c 1 2 3 4 dt test s
  • 如何将 iOS 设备键盘更改为特定语言

    在iOS中 开发者可以获取当前设备语言和区域设置 但是 如果我们想根据用户的偏好将键盘设置为特定语言 区域设置 当用户位于应用程序的不同部分时 该怎么办 在我的应用程序中 有多种语言 我希望向用户显示阿拉伯语键盘 例如 当用户位于阿拉伯语部
  • 序列化 Drawable 时出现问题

    我有一个对象 它具有三个字段 两个字符串和一个Drawable public class MyObject implements Serializable private static final long serialVersionUID
  • 按作者列出类别〜WITH COUNTER〜(Wordpress)

    这是我得到的代码 它给出了给定作者已发表的类别的列表 但是 我非常希望类别名称旁边有一个数字 告诉作者在不同类别中发表了多少篇文章 有谁知道一个技巧吗 谢谢
  • 无需安装即可使用 SqlServer CE

    Given 干净的机器 不存在 SQL Server CE 一组 sdf 文件 Sql Server CE 数据库 不管它们是如何到达那里的 相关 Sql Server CE 的 DLL sqlceca35 dll sqlcecompact
  • 使用 angularjs 过滤两个选定日期之间的表数据时出现问题

    我正在根据两个选定的日期过滤表格内容 它确实过滤了日期 但结果不正确 dateRange Filter 写在控制器中 生产控制员 angular module app controller ProductionController scop
  • 如何即时播放非 PCM 文件或将其转换为 PCM?

    以下代码适用于某些 wav 文件 但适用于其他文件时 我得到 InvalidOperationException 未处理 Message Sound API 仅支持播放 PCM 波形文件 var webClient new WebClien
  • 在 Java 中将一系列图像转换为视频?

    目前 功能原型拥有工作所需的一切 一个半透明窗口 可以轻松调整您想要记录的位置的大小 多个线程来管理屏幕截图等 但我需要它完成的最后一项任务却没有完成我几个月了 我需要转换所有转储到我创建的文件夹中的图像temp 一切完成后我将其删除 放入
  • 如何在 PHP 中从 csv 文件中提取数据

    我有一个 csv 文件 如下所示 lines 0 text with commas another text 123 text 5 lines 1 some without commas another text 123 text line
  • 赋值和序列点:这怎么有歧义?

    考虑 C 代码a a a 没有用于赋值的序列点 因此此代码在编译有关未定义操作的警告时会产生警告a 可能的值是什么a这里可以有吗 这好像是a不可能改变价值观 这里实际上是否存在未定义的行为 或者编译器只是懒惰 序列点违规的未定义行为规则对于
  • 将图像添加到 JavaFX TableView 列中

    我是 Java 和 OOP 新手 并且陷入了向 tableview 列添加图像的困境 代码似乎有效 我可以看到学生的姓名正确 但图像未显示在列中 我收到此错误并且无法理解如何使其工作 javafx scene control cell Pr
  • 如何清除内容而不收到可怕的“停止运行此脚本”?对话?

    在 Windows 窗体中 某些控件上有 BeginUpdate EndUpdate 对 我想要类似的东西 但是对于 jQuery 我有一个 div 里面有一个 div 像这样 div class column div div div 在内
  • 解决 Android 不再支持的 Canvas.clipPath() 问题

    从安卓3 0开始剪辑路径 打开硬件加速的设备不再支持该方法 阅读本文article更多细节 我正在使用画布 我需要绘制圆形图像 关于我该如何做到这一点有什么想法吗 我无法关闭硬件加速 我正在寻找其他解决方案 回答 Tnx Malcolm 寻
  • ShapeDrawable 作为 Android 中评级栏的 ProgressDrawable?

    看来我无法将 ShapeDrawable 设置为 Ratingbar 的 ProgressDrawable 我尝试了以下方法但失败了
  • 我尝试将 Spring 的默认记录器更改为 log4j2 有什么问题吗?

    我是 Spring Boot 的新手 我想将默认记录器更改为 log4j2 因为它比 logback 具有更高的吞吐量 这是我的 Gradle 脚本 如您所见 我使用的是 Spring Boot 2 0 3 为了禁用默认记录器 我在 Spr
  • BluetoothChat 示例:NullPointerException [重复]

    这个问题在这里已经有答案了 可能的重复 getActionBar 返回 null 完全的安卓菜鸟 我正在尝试从 Galaxy S3 运行 BluetoothChat 示例 但它似乎在应用程序运行时崩溃了 这是 LogCat 输出 09 14
  • DataReader 为 null 或为空

    Using C 我有一个数据读取器 它从 mysql 数据库返回记录列表 我正在尝试编写代码来检查数据读取器是否为空 其背后的逻辑是 如果数据读取器有字段 则显示信息 否则隐藏该字段 我努力了 cmd1 new OdbcCommand Se