首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 图形图象-> PHOTOSHOP教程
ado.net 2.0:如何排除错误信息「当目前没有数据时,尝试读取无效」(c#) _ado.net应用
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 


图一

图二

图表 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


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·一个通用的JSP分页程序-JSP教程,Jsp/Servlet
·几种上传方法介绍和比较-JSP教程,资料/其它
·photoshop帮你处理照片偏色
·用photoshop elements制作贺卡
·高频开关电源的并联均流系统
·photoshop 简单制作水晶字教程
·ASP.NET 2.0服务器控件与form runat=server标记-.NET教程,Asp.Net开发
·photoshop 简单去网纹法
·晶晶亮 透心凉—用photoshop制作水珠效果
·ASP小偷(远程数据获取)程序的入门教程-ASP教程,数据库相关
最新文章
·b2c独立网店如何推广_营销推广
·google adsense域名保护列表前瞻_网赚技巧
·google adsense 违规行为集_网赚技巧
·优化adsense提高网站收益(一)_网赚技巧
·站长徐得红:提倡人性化的领导_站长访谈
·约翰·多尔:互联网内容仍不够个性化_站长访谈
·助您提升博客浏览量的五大技巧_站长心得
·photoshop模仿龟裂的瓷纹杯_photoshop教程
·2007年,个人站长将何去何从?_站长心得
·解惑:网站是靠什么来赚钱的呢_站长心得
相关主题
  • ado.net在开发中的部分使用方法和技巧_ado.net应用
  • ado.net执行oracle 存储过程_ado.net应用
  • ado.net 如何读取 excel_ado.net应用
  • ado.net快马加鞭_ado.net应用
  • ado.net数据库连接_ado.net应用
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭