All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
.NET下的设计模式研究之桥接模式_.net资料_编程技术
SqlServer教程:SqlServer中各数据类型的长度、精度_[SQL Server教程]
ASP.NET,MVC+LINQ开发一个图书销售站点(7)-图书分类管理_[Asp.Net教程]
如何让javascript,操作Cookie_php资料_编程技术
ASP.NET实例:多文件上传源码_[Asp.Net教程]
SQL循序渐进(13)ORDER,BY子句_[SQL,Server教程]
PHP,存取,MySQL,数据库的一个例子_php资料_编程技术
PHP安全配置_php资料_编程技术
sql2005,用户sa,登录失败,该用户与可信SQL,Server连接无关联_mssql学习_编程技术
Delphi使用ADO连接SQL Server 2000数据库
Reading number is top 10 pictures
Sora aoi possession of boudoir1
Parking technology is great, that give you the keys can't stolen
9.3阅兵全景图3-外国方阵梯队和坦克方阵梯队
Seductive beauty of crime1
A beautiful girl to bud1
采访美女孙菲菲
遇到插队的怎么办?
From China fortress sora aoi3
两个妞在等世界上最短的火车
Discharge accidentally Actresses by the breast1
Download software ranking
Boxer's Top ten classic battle8
Rio big adventure
金山office2007
Proficient in Eclipse
Unix video tutorial9
Boxer's Top ten classic battle10
Unix video tutorial18
linux初级教程
超级战舰
Tram sex maniac 2 (H) rar bag7
delv published in(发表于) 2014/1/10 6:23:33 Edit(编辑)
ADO.NET,2.0:如何排除错误信息_[Asp.Net教程]

ADO.NET,2.0:如何排除错误信息_[Asp.Net教程]

ADO.NET 2.0:如何排除错误信息_[Asp.Net教程]


图1



图2


图表 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();
}
}
}
...
}


章立民研究室敬上


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


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.