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

时间:2016-01-06 06:37:22

标签: c#

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 server检索数据。但while(Reader.read())上的错误。

  

关闭阅读器时无效尝试调用Read   而(Reader.read())。

为什么?

2 个答案:

答案 0 :(得分:1)

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

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

相反,您只需完全删除while循环:

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

答案 1 :(得分:0)

我认为使用 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); } } } 会弄乱你的读者。

尝试使用如下所示;

     private float spacing(WrapMotionEvent event) {
         // ...
         float x = event.getX(0) - event.getX(1);
        float y = event.getY(0) - event.getY(1);
        return (Float)Math.sqrt (x * x + y * y);
    }