2016-04-03 12 views
1

私はVS13とSQL Server 2012のプロジェクトで作業していますが、少し問題があります。私は自分のデータベースからデータを読み取ることができないようです。私がデータを読み取るために使用するSqlDataReaderオブジェクトで何らかの操作をしようとすると例外がスローされます。操作が実行されるたびに例外がスローされるSqlDataReaderオブジェクト

例外はInvalidOperationExceptionです。

このコードを見て、この関数をSQLクエリでパラメータとして呼び出し、返されたオブジェクトを別のSqlDataReaderオブジェクトに格納します。

private SqlDataReader reader (string sqCommand) 
{ 
     myConnection.Open(); 
     string string1; 
     string1 = sqCommand; 
     SqlDataReader a = null; 

     try 
     { 
      SqlCommand Newcommand = new SqlCommand(string1, myConnection); 
      a = Newcommand.ExecuteReader(); 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 

     myConnection.Close(); 

     if (a.Read())  //**statement 1** 
      return a; 
     else 
      return null; 
    } 

私は上記のコードでは、私はオブジェクトAまたはこれを受けて、オブジェクトに対して実行するすべての操作でマークの文1で例外を取得します。

誰でも自分のコードに間違いがあると教えてください。エラーのためにコードの他の部分が必要な場合、私はそれを提供することができます。

ご協力いただきありがとうございます。 :)

+0

この投稿に表示される場合があります。 http://stackoverflow.com/questions/23187029/sqldatareader-invalidoperationexception –

答えて

3

SqlDataReaderを使用している間は、接続を開いたままにする必要があります。 SqlDataReaderのより一般的な使用方法は、次のとおりです。

private List<object> Reader(string sqCommand) 
{ 
    using (SqlConnection myConnection = new SqlConnection(ConnectionString)) 
    { 
     myConnection.Open(); 

     using (SqlCommand cmd = new SqlCommand(sqCommand, myConnection)) 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      List<object> list = new List<object>(); 

      while (reader.Read()) 
      { 
       list.Add(reader[0]); 
      } 

      return list; 
     } 
    } 
} 
+0

ご協力ありがとうございます。私はそれを修正しようとしている間、私は読者を使用している間に接続が開いていると考えました。私はちょうど例外によって提供された情報を読むことが起こり、それは私がそれが欲しかったことを行うことはできませんので、接続が閉じられていると言いました。私は実際にはform_load関数で接続を開き、終了時(終了時)にこれを単なるログインフォームとして閉じて問題を解決しました。 –

+0

@ SahilSoni、あなたが言及したようにコードを稼働させているにもかかわらず、私はキリルの例に従ってリファクタリングすることをお勧めします。ベストプラクティスは、リソースを管理するためにIDisposable(using)を活用して、「オープン・ラスト・クローズ・アーリー」のパターンに従うことです。 –

+0

@DanGuzman大丈夫です、私は "早い段階で早期終了"に必要な変更を行います。私が取り組んでいるプロジェクトはちょっと無駄です、どこでも使えませんが、私は大学のカリキュラムのためにこれを作らなければなりません。私は6月から取り組んでいると思うもう一つのプロジェクトがあります。それは大きくなるでしょう!私が自分で修正することができなければ、私はこのサイトに私の質問を掲示します。 –