2010-11-21 78 views
2

我遇到了錯誤「連接必須有效,並再次打開,當我更改我的sql查詢代碼。任何人都可以幫忙??(編輯)在form1中,我已連接到數據庫在窗口2我想補充的查詢。連接必須有效並再次打開

//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 2010-11-21 01:20:58

0

嘗試:

cmd.Open(); 

...之前的ExecuteNonQuery()

:)我希望這可以幫助,請告知,如果你還是有問題。

此外,暫時嘗試刪除cmd.ExecuteNonQuery,因爲我認爲它可能連接兩次,因此錯誤「連接必須是有效的並且打開」。它不能是「開放的」,因爲你已經使用ExecuteReader()連接了。

+0

cmd.Open()沒有工作,甚至沒有列出。 (如果你在談論connection.Open()我可以告訴你它已經在第一個窗口FORM1中打開了。 – Marcus 2010-11-21 01:19:55

0

當我在一個類中打開一個連接並嘗試在不同的類/窗體中使用它時,我遇到了這個確切的問題。一次打開多個連接是完全可以的,因此爲每個類創建一個新的MySqlConnection實例,並在該類中打開並關閉它。

相關問題