2010-11-21 22 views
2

SQLクエリコードを変更したときに接続が有効であり、再度開く必要があります誰でも手助けできますか?(編集)フォーム1ではデータベースに接続しました、Form2の中で私は、クエリを追加しようとしている。接続は有効でオープンしている必要があります

//IN Class1.cs 
public void test(string query, string name) 
{ 
    MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(query, connection); 
    cmd.CommandText = @query; 
    cmd.Parameters.AddWithValue("Name", name); 
    MySql.Data.MySqlClient.MySqlDataReader Reader = cmd.ExecuteReader(); 
    while (Reader.Read()) 
    { 
     Console.WriteLine(Reader[0]); 
    } 
    cmd.ExecuteNonQuery(); 
} 
//IN Form2.cs 
private void button2_Click(object sender, EventArgs e) 
{ 
    name = textBox1.Text; 
    var obj = new Class1(); 
    obj.test(@"SELECT * FROM players WHERE name = ?Name;", name); 
} 

答えて

2

接続が処分されているように見える(さえ全く開いていないか、または可能!)

理想的には私はユニットを使用するためにそれを変更したいですまた、ブロックを使用してインスタンスをラップし、正しく廃棄されるようにします。

using (var connection = new MySqlConnection("connection-string")) 
{ 
    using (var command = new MySqlCommand(query, connection)) 
    { 
    connection.Open(); 

    command.Parameters.AddWithValue("?name", name); 

    using (var reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
     Console.WriteLine(reader[0]); 
     } 
    } 
    } 
} 

ExecuteReader()を既に使用した後で、cmd.ExecuteNonQuery();を呼び出す目的は何ですか?

+0

FORM1で開かれました。上記のコードはFORM2のものです。 – Marcus

0

試してみてください。

cmd.Open(); 

...のExecuteNonQuery()の前

:)私は、これはあなたがまだ問題を抱えている場合はお知らせください、助けを願っています。

また、しばらくの間、cmd.ExecuteNonQueryを削除してみてください。これは2回接続している可能性があるため、「接続は有効で開いている必要があります。 ExecuteReader()を使用して既に接続されているため、「開く」ことはできません。

+0

cmd.Open()は機能しませんでした。 (あなたがconnection.Open()について話しているのであれば、最初のウィンドウであるFORM1ですでに開いていると言えます。 – Marcus

0

1つのクラスで接続を開いて別のクラス/フォームで使用しようとしたときに、この問題が発生しました。一度に複数の接続を開いても大丈夫ですので、すべてのクラスに対して新しいMySqlConnectionインスタンスを作成し、そのクラス内で開いたり閉じたりしてください。

関連する問題