gpt4 book ai didi

c# - Winforms 中的 DatagridView,SqlDataReader 是否在循环结束时自动关闭?

转载 作者:行者123 更新时间:2023-11-30 13:41:11 25 4
gpt4 key购买 nike

int a ;

SqlCommand cmd = new SqlCommand (" Select * From items order by ItemID ", conn );

SqlDataReader reader = cmd.ExecuteReader();

while(reader.Read())
{
a = reader.GetInt32(0);

if (reader.HasRows == false)
{
dataGridView1.Visible = false;
}

else
{
dataGridView1.Visible = true;

DataTable dt = null;

dt = new DataTable();

dt.Load(reader);

dataGridView1.DataSource = dt;

if (reader.IsClosed == true)
{
break;
}
}

请问是不是reader自动关闭了,因为这里没有使用reader.Close()还是关闭了?另外,在我的项目表中,我的第一条记录是

项目编号 |元素名称

 1       Bag
2 Laptop
8 Weighing Machine

但是,当此数据显示在 datagridview 中时,不会显示第 1 行,即项目名称“BAG”。为什么会这样?

最佳答案

通过调用 Read(),您已经“声明”了第一行(因此 Bag 没有显示的原因 - 因为您没有对它做任何事情);然而 dt.Load 将执行 while(reader.Read())。我希望你想要(注意我不是在这里调用 Read,并且没有 while 循环):

if(reader.HasRows)
{
// load via dt.Load() and show
}
else
{
// hide
}

它退出的原因是,一旦您调用了 Load,您就已经读取了所有数据,因此没有其他内容可读取。老实说,我不知道到达 TDS 流的末尾是否会隐式关闭阅读器,但您应该使用:

using(var cmd = new SqlCommand (" Select * From items order by ItemID ", conn))
using(var reader = cmd.ExecuteReader())
{
// everything else in here
}

关于c# - Winforms 中的 DatagridView,SqlDataReader 是否在循环结束时自动关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5604650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com