一个有关于DataReader的问题

zy_8002006 2006-04-11 04:34:54
是WinForm开发。
While myDR.Read
 myDataRow = myDataTable.NewRow()
myDataRow("a") = myDR(0)
myDataRow("b") = myDR(1)
myDataRow("c") = myDR(2)
myDataRow("d") = myDR(3)
myDataRow("e") = myDR(4)
myDataRow("f") = myDR(5)
myDataRow("g") = myDR(6)
myDataRow("h") = myDR(7)
myDataTable.Rows.Add(myDataRow)
End While
myDR.Close()
根据条件将数据库中的数据用DataReader读出来,并放到一个DataTable中,然后把这个Table传到DataGrid中,第一次查询时DataGrid会很快显示出符合条件的信息,但当第二次用相同的查询条件再运行时,DataGrid里没有显示出来信息,并且程序没有反应。我已经把DataRow中的数据清空了,请问这是为什么?
...全文
205 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tony8002003 2006-04-12
  • 打赏
  • 举报
回复
慢的原因,是因为你没有将列的值清空。
如果没有将列的值清空,再次运行时,它不是把数据集传到DataGrid中,而是一条一条的传,所以慢,如果你将列的值清空,这样的问题就没有了。
用Dispose对列进行清空操作。
zy_8002006 2006-04-12
  • 打赏
  • 举报
回复
To:Knight94(愚翁),比如吧,在DataGrid中显示出来的内容,宽度都是不相同的,所以要根据它们各自的内容来定义宽度,用到了DataGridTextBoxColumn。
zy_8002006 2006-04-12
  • 打赏
  • 举报
回复
Up
Knight94 2006-04-12
  • 打赏
  • 举报
回复
to 但因为我用到了DataGridTextBoxColumn,我需要用到它的一些东西,我只用能DataReader

不明白什么意思,DataSet在绑定的时候很灵活
zy_8002006 2006-04-12
  • 打赏
  • 举报
回复
To:dlzhangln(我要飞得更高),是的,我确定,第二次执行的速度实在是太慢了,我就想知道是为什么?
dlzhangln 2006-04-12
  • 打赏
  • 举报
回复
确定跳出循环了吗,确定dtreader.close();dtreader=nothing了吗
zy_8002006 2006-04-12
  • 打赏
  • 举报
回复
新的一天,新的开始,但程序的问题依在,请大家帮帮忙
zy_8002006 2006-04-11
  • 打赏
  • 举报
回复
To:Knight94(愚翁),我也想这样,但因为我用到了DataGridTextBoxColumn,我需要用到它的一些东西,我只用能DataReader
Knight94 2006-04-11
  • 打赏
  • 举报
回复
既然要放到DataTable中,你用DataAdapter+DataSet来得更方便些。
zy_8002006 2006-04-11
  • 打赏
  • 举报
回复
To:ruanruoshi(软若石),第二次运行时设了断点,它能够进到循环体里,并且可以将数据显示出来,但,如果没有设断点,让它直接运行,一个字:慢。等了快3分钟还没有把值显示出来。

To:kelong18433():我在循环体之外已经写了DataReader.Close(),所以再运行时,DataReader会重新读sql语句,因此,它能够Read出来。
kelong18433 2006-04-11
  • 打赏
  • 举报
回复
楼主注意DataReader的特性,是只向前不向后的,第一次读取完以后,DataReader的“指针”已经到了最后,第二次读的时候,While myDR.Read,就是False了
软若石 2006-04-11
  • 打赏
  • 举报
回复
你跟踪调试一下看走到那儿了。或者是不是进入了死循环。
zy_8002006 2006-04-11
  • 打赏
  • 举报
回复
补充一下,我在Reader之前和Reader之后都放了一个MsgBox。类似于下面的代码:
MsgBox("############")
While myDR.Read
 myDataRow = myDataTable.NewRow()
myDataRow("a") = myDR(0)
myDataRow("b") = myDR(1)
myDataRow("c") = myDR(2)
myDataRow("d") = myDR(3)
myDataRow("e") = myDR(4)
myDataRow("f") = myDR(5)
myDataRow("g") = myDR(6)
myDataRow("h") = myDR(7)
myDataTable.Rows.Add(myDataRow)
End While
MsgBox("@@@@@@@@@@@@")
myDR.Close()
当第一次运行时,后面的MsgBox能够弹出来,第二次运行时就弹不出来了,所以我认为它是一直在循环体里,根本没有出来,我就是不知道,为什么第一次可以,第二次就不行呢?

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧