2016-01-06 89 views
0
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.but檢索數據,但在while(Reader.read())錯誤。無效嘗試呼叫讀取器關閉時讀取(Reader.read())。爲什麼?

無效嘗試呼叫讀取器關閉時讀取 while(Reader.read())。

爲什麼呢?

+1

嘗試'ExecuteReader'沒有''CloseConnection' CommandBehavior'。像這樣'command.ExecuteReader()' – Irshad

+0

你的讀者可能是空的。在while循環之前測試null。 – jdweng

+0

爲什麼每行創建一個數據表?嘗試簡單地刪除while-part,留下3行。 –

回答

0

我想用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); 
      } 
     } 
    } 
1

這裏的問題是您在while循環中使用DataTable.Load

while循環基本上說「雖然有更多的行」,然後調用DataTable.Load加載所有行,然後回去檢查更多。

相反,你可以簡單地完全消除while循環:

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