当读取器关闭时调用读取的无效尝试(Reader.read()).为什么

本文关键字:读取 Reader read 为什么 调用 无效 | 更新日期: 2023-09-27 18:29:19

DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection("Data Source=NSIC;Initial Catalog=Dev;User ID=sa;Password=123456"))
{
    // SqlDataAdapter adapter = new SqlDataAdapter("Select * from Employee", connection);
    connection.Open();
    //adapter.Fill(ds);
    using (SqlCommand command = new SqlCommand("Select * from Employee", connection))
    {
        using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
        {
            while (reader.Read()) //Error is here
            {
                var table = new DataTable();
                table.Load(reader);
                ds.Tables.Add(table);
            }
        }
    }
}
GridView1.DataSource = ds;

我正在尝试从数据sql服务器检索数据,但是while(Reader.read())错误。

在 上关闭读取器时调用读取的尝试无效 while(Reader.read(((.

为什么?

当读取器关闭时调用读取的无效尝试(Reader.read()).为什么

这里的问题是你在while循环中使用了DataTable.Load。

while循环基本上说"虽然有更多的行",然后你调用加载所有行的DataTable.Load,然后返回检查更多行。

相反,您可以简单地完全删除while循环:

using (SqlDataReader reader = command.ExecuteReader()) 
{
    var table = new DataTable();
    table.Load(reader);
    ds.Tables.Add(table);
}

我认为使用CommandBehavior.CloseConnection会弄乱你的读者。

尝试像下面这样使用它;

    using (SqlConnection connection = new SqlConnection("Data Source=NSIC;Initial Catalog=Dev;User ID=sa;Password=123456"))
    using (SqlCommand command = new SqlCommand("Select * from Employee", connection))
    {
        connection.Open();
        using (SqlDataReader reader = command.ExecuteReader()) 
        {
            while (reader.Read())
            {
               var table = new DataTable();
               table.Load(reader);
               ds.Tables.Add(table);
            }
        }
    }