首 页 | 精品电影 | 音乐天堂 | 在线游戏 | Flash MTV | 三湘书屋 | 幽默笑话 | 三湘图库 | 美女写真 | IT知识库 | QQ贴图 | 加入书签

网页制作网络编程图形图象操作系统冲浪宝典软件教学网络安全认证考试通信技术电子商务业内动态书籍教程原码

最近更新 文章分类 多媒体类 精品软件

本站搜索:
您的位置:三湘时空 -> IT知识库 -> 文章分类 -> ADO.NET应用 -> ADO.NET 2.0:如何排除错误信息「当目前没有数据时,尝试读取无效」(C#)
ADO.NET 2.0:如何排除错误信息「当目前没有数据时,尝试读取无效」(C#)


文章类别:ADO.NET应用 来源: 作者: 发表日期:2006-11-5 字体:[ ]

小游戏 | 在线影院 | 幽默笑话 | 源码下载 | Flash MTV | 音乐试听 | 书屋 | 美女写真


图一

图二

图表 1 与 2 所示的程序示范如何取得数据命令所传回的两个结果集,并将这两个结果集之所有数据记录之所有字段的内容显示于窗体上的 TextBox 控件中。

本范例将两道 SELECT 表达式指派给 SqlCommand 对象的 CommandText 属性,因此在使用 ExecuteReader 方法执行数据命令后会传回两个结果集。我们藉由调用 SqlDataReader 对象的 NextResult 方法来顺序处理各个结果集,而在处理个别的结果集时,则调用 SqlDataReader 对象的 GetName 方法来取得字段名称(亦即 myReader.GetName(i)),并位置顺序传递给 SqlDataReader 对象来取得字段的数据内容(亦即 myReader[i])。

特别要说明的是,使用 Using 表达式来执行数据命令,产生 SqlDataReader 对象,并传回多个数据结果集之后,如果搭配 Do..While 循环来取得结果集所有数据记录之各字段的名称与字段的内容时,会出现「当目前没有资料时,尝试读取无效」的错误信息。

怎么会发生这个问题呢?问题就出在 Do…While 循环身上。Do…While 循环的特色是,不论指定的判断表达式之结果是 True 还是 False,至少都会将 { } 内的程序代码区块执行一次。换句话说,在没有执行 myReader.Read() 函式之前,如果先执行 myReader.GetName(i) 函式来取得数据,当然就会发生错误。

要解决这个问题,请您将原本的 Do…While 循环改写为 While 循环,判断式一样可以利用 myReader.Read()。相关程序代码撰写于窗体的 Load 事件处理例程中,列示如下:

private void CH6_DemoForm010_Load(object sender, EventArgs e)
{
 ...
 try
 {
  // 建立连接。
  using (SqlConnection con = new
    SqlConnection(connectStringBuilder.ConnectionString))
  {
   // 建立数据命令对象(亦即SqlCommand 对象)。
   SqlCommand foxCMD = new SqlCommand();
  
   foxCMD.Connection = con;
  
   // 将两道SELECT 表达式指派给CommandText 属性,
   // 此举将使得数据命令会传回两个结果集。
   foxCMD.CommandText = "SELECT * FROM 章立民研究室;SELECT * FROM 客户";
  
   // 开启连接。
   con.Open();
  
   int resultSetCounter = 1;
   StringBuilder s = new StringBuilder();
  
   // 执行会传回多个结果集的数据命令。
   using (SqlDataReader myReader = foxCMD.ExecuteReader())
   {
    bool fNextResult = true;
   
    // 顺序处理各个结果集。
    do
    {
     ...
     switch (resultSetCounter)
     {
      case 1:
        s.AppendLine("「章立民研究室」数据表的数据记录");
        break;
      case 2:
        s.AppendLine("「客户」数据表的数据记录");
        break;
     }
     ...
     // 取得结果集所有数据记录之各字段的名称与字段的内容。
     if (myReader.HasRows)
     {
      while (myReader.Read())
      {
       for (int i = 0; i < myReader.FieldCount; i++)
       {
        s.AppendLine(myReader.GetName(i) + ": " + myReader[i].ToString());
       }
       ...
      }
     }
    
     // 将数据读取器前移到下一个结果集。
     fNextResult = myReader.NextResult();
    
     resultSetCounter += 1;
    }
    while (fNextResult);
   
    // 将所取得的数据指派给TextBox 控件的Text 属性。
    txtInfo.Text = s.ToString();
   }
  }
 }
 ...
}

章立民研究室敬上

期待更多精彩,敬请关注:

http://www.china-pub.com/static/jsj_zlm_060824.html

上一篇:Photoshop曲线调色之一“反转片效果” 下一篇:dot net html分析类库
本栏目热门文章
·ADO.NET 数据库实例教程 2005-10-4
·使用ADO.net将数据导出到Excel并提供下载 2005-12-20
·ASP.NET中存取图片到数据库的示例 2005-10-4
·ASP.NET数据库编程 2005-10-4
·用ado.net对word,excel进行存取 2005-10-4
·ADO.NET操纵数据库 2006-2-2
·NHibernate与Ado.Net查询速度的比较 2006-3-20
·使用 DataAdapter 执行批量更新 2006-4-30
·ADO.NET中的多数据表操作浅析之读取 2005-10-4
·最佳实践 ADO.NET实用经验无保留曝光 2005-10-4
新近更新文章
·ADO.NET 2.0:如何排除错误信息「当目前没有数据时,尝试读取 2006-11-5
·ADO.NET2.0跟ADO.NET3.0的一些新特性简要介绍 2006-9-8
·下一代ADO.NET---ADO.NET Entity Framew 2006-8-19
·通过ADO.NET存取文件 2006-7-14
·通过ADO.NET实现事务处理 2006-7-14
·初谈ADO.NET中利用DataAdapter进行数据操作 2006-7-5
·ADO.NET性能改善方法集合 2006-5-22
·使用 DataAdapter 执行批量更新 2006-4-30
·ADO.NET起步 2006-4-28
·NHibernate与Ado.Net查询速度的比较 2006-3-20
首 页 | 软件发布 | 广告联系 | 下载帮助 | 意见反馈 | 网站地图
  CopyRight? 2002-2004 WWW.SXSKY.NET? All Rights Reserved
三湘时空 站长QQ:82675303 Email: