sql*_*ild 3 .net c# datagridview sql-server-2005 sqldatareader
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我想问问读者是否自动关闭了,因为这里没有使用reader.Close()仍然关闭了吗?另外,在我的项目表中,我有第一条记录为
1 Bag
2 Laptop
8 Weighing Machine
Run Code Online (Sandbox Code Playgroud)
但是,当此数据显示在datagridview中时,则不显示行1,即项目名称“ BAG”。为什么这样?
通过调用Read(),您已经“声明”了第一行(因此,为什么Bag不显示-因为您没有对其进行任何操作);然而dt.Load在还打算做while(reader.Read())。我希望您想要(请注意,我没有Read在这里打电话,并且没有while循环):
if(reader.HasRows)
{
// load via dt.Load() and show
}
else
{
// hide
}
Run Code Online (Sandbox Code Playgroud)
退出的原因是,一旦调用,Load您就已经读取了所有数据,因此没有其他要读取的数据。老实说,我不知道到达TDS流的结尾是否暗中关闭了读者,但是您应该使用:
using(var cmd = new SqlCommand (" Select * From items order by ItemID ", conn))
using(var reader = cmd.ExecuteReader())
{
// everything else in here
}
Run Code Online (Sandbox Code Playgroud)