2017-07-10 7 views
-1

MySqlを使用しているときに、私のaspnetcoreアプリケーションで次のエラーが発生します。ステートメントを使用して接続が開かない

System.InvalidOperationException:接続が有効でオープンである必要があります。

MySql.Data.MySqlClient.MySqlCommand.Throw(例外EX)MySql.Data.MySqlClient.MySqlCommand.CheckState()MySql.Data.MySqlClient.MySqlCommand.ExecuteReaderで

(のCommandBehaviorで

)動作)bdtFood.Controllers.PersonController.GetAll(のInt32 ID)で

lambda_method(閉鎖、オブジェクトにおいて、オブジェクト[] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvokerの

d__28.MoveNext()

ここでは、私が使用するコードは、次のとおり

using (var connection = new MySqlConnection(myConnectionString)) 
using (var command = connection.CreateCommand()) 
{ 
    command.CommandText = "SELECT * FROM person"; 
    Modells.Person helpPerson; 
    using (reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      helpPerson = new Modells.Person(reader.GetInt32(0), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), reader.GetInt32(5)); 
      persons.Add(helpPerson); 
     } 
    } 
} 

接続は、読者が作用時間オープンであるべきです。そうではありません。デバッグ中は接続が切断されます。 EDIT:MySqlDataReader reader;がコントローラクラスで宣言されています。

+5

https://msdn.microsoft.com/en-us/library/system.data.sqlclient .sqlconnection.open(v = vs.110).aspx)どこでも見ることができます。 –

+0

あなたはそれを開いていないときに接続が開いていると思いますか? – DavidG

+2

'' 'SqlClient'''は、コマンドを使って接続を開始するときに、自動的にその接続をオープンしません。適切な時に '' '.Open()' ''と '' '.Close()' ''を呼び出すことによって、接続の状態を管理します。 –

答えて

1

SqlConnectionを使用する前に開封する必要があります。 usingステートメントは、オブジェクトが使用されていない場合にのみオブジェクトを破棄します。それで、使用ブロック(paranthesisで宣言されている)で使用したいオブジェクトが、IDisposableを実装する必要がある理由があります。あなたの問題は、このことによって解決されなければならない:あなたは([ `SqlConnection.Openを()`を呼び出す]されていません

using (var connection = new MySqlConnection(myConnectionString)) 
using (var command = connection.CreateCommand()) 
{ 
    connection.Open(); 
    command.CommandText = "SELECT * FROM person"; 
    Modells.Person helpPerson; 
    using (reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      helpPerson = new Modells.Person(reader.GetInt32(0), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), reader.GetInt32(5)); 
      persons.Add(helpPerson); 
     } 
    } 

    connection.Close(); 
} 
関連する問題