2011-12-20 72 views
1

このデータグリッドをバインドしようとすると苦労しています。コードを実行するたびに、「リーダーが閉じたときにReadを呼び出す試みが無効です」というエラーメッセージが表示されます。私はどこの読者を閉じているのかわかりません。手伝ってくれませんか?データグリッドをロードするための私のコードは以下の通りです:リーダーが閉じられているときに読み込みを呼び出す試みが無効です

protected void LoadGrid() 
     { 
      using (SqlConnection conn = new SqlConnection()) 
      { 
       conn.ConnectionString = ConfigurationManager.ConnectionStrings["VTC"].ConnectionString; 
       conn.Open(); 


       string sql = "select * from roi_tracking"; 
       using (SqlCommand cmd = new SqlCommand(sql, conn)) 
       { 
        using (SqlDataReader sqlReader = cmd.ExecuteReader()) 
        { 

         gridROI.DataSource = sqlReader; 
         gridROI.DataBind(); 

         sqlReader.Dispose(); 
         cmd.Dispose(); 
        } 
       } 

      } 
     } 
+0

あなたのusingステートメントは、このスレッドをチェックするために接続を閉じるでしょう、あなたの質問に答えるかもしれないhttp://stackoverflow.com/questions/5516914/invalid-attempt-to-read-when-reader-is-closed –

+0

同じ別のシナリオでのエラーhttp://stackoverflow.com/questions/6775136/invalid-attempt-to-call-read-when-reader-is-closed-error-for-lengthy-operatio – Lijo

答えて

2

あなたがDataGridのデータソースとしてSqlDataReaderのを使用することはできません。 MSDNから

データソースが(例えば System.Data.DataView、System.Collections.ArrayList、または システムとしてSystem.Collections.IEnumerableインターフェイスのいずれかを実装するコレクションでなければなりません.Collections.Generic.List(Of T))または へのIListSourceインターフェイスは、BaseDataListクラスから派生したコントロールにバインドします。

DataSourceプロパティ: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedatalist.datasource.aspx

SqlDataReaderの: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

ことを結合し、その後のDataTableまたはDataSetを埋めるためにSqlDataAdapterオブジェクトを使用することですあなたのデータグリッドにクエリ結果を結合して、するための共通の方法論あなたのDataGrid.DataSourceに:

protected void LoadGrid() 
    { 
     using (SqlConnection conn = new SqlConnection()) 
     { 
      conn.ConnectionString = ConfigurationManager.ConnectionStrings["VTC"].ConnectionString; 
      conn.Open(); 

      string sql = "select * from roi_tracking"; 
      using (SqlCommand cmd = new SqlCommand(sql, conn)) 
      { 
       SqlDataAdapter adapter = new SqlDataAdapter(); 
       adapter.SelectCommand = cmd; 

       adapter.Fill((DataTable)results); 
       gridROI.DataSource = results; 
      } 

     } 
    } 
+0

ありがとうPseudocoderとマイク!あなたのアドバイスは多くの助けとなり、私のコードは現在機能しています。 :) – JTRookie86

+0

@ user1108273私の喜び:)あなたの問題が解決したと感じたら、答えを受け入れることを忘れないでください。 – pseudocoder

1

pseuとにかくSqlDataReaderにバインドすることは望ましくありません。データベースへの接続は、リーダーインスタンスが存在する限り開いたままになります。

データを他の接続されていないデータ構造にデシリアライズして、できるだけ早くプールに戻すようにしてください。

関連する問題