2013-03-22 26 views
1

我在編碼中得到這個錯誤,請告訴我什麼可能是錯誤的?以及如何糾正它在我的if語句中的其他部分我有這個錯誤,請告訴我如何解決它

已經有一個與此連接關聯的打開的DataReader,必須先關閉它。 這裏在這個子部分,我檢索數據中的if部分和我插入數據的其他部分。如果條件不滿意。所以在其他部分我收到上述錯誤

代碼:

Dim con As MySql.Data.MySqlClient.MySqlConnection = New MySqlClient.MySqlConnection("server=localhost;user=root;database=zzz;port=3306;password;") 
    con.Open() 
    Dim cmd As MySqlClient.MySqlCommand 
    Dim dr As MySqlClient.MySqlDataReader 
    cmd = con.CreateCommand() 
    cmd.CommandText = "select sino FROM customers WHERE sino =('" + serialno.Text + "')" 
    cmd.ExecuteNonQuery() 
    dr = cmd.ExecuteReader() 
    If dr.HasRows = True Then 
     MsgBox("number already exists") 
     dr.Close() 

    ElseIf dr.HasRows = False Then 

     Dim sqlc As String 
     sqlc = "insert into customers values('" + serialno.Text + "','" + custname.Text + "','" + address.Text + "','" + phno.Text + "','" + eid.Text + "','" + event_type.Text + " ')" 
     Dim command As MySqlClient.MySqlCommand = New MySqlClient.MySqlCommand(sqlc, con) 
     command.ExecuteNonQuery() 
     MessageBox.Show(sqlc) 
     con.Close() 
    End If 
+0

我認爲一個簡單的谷歌搜索將你解決問題了http://stackoverflow.com/questions/5440168/c-sharp-mysql-there-is-already-an-open- datareader-associated-with-this-connectio – spullen 2013-03-22 15:06:54

+0

請問你可以粘貼一些代碼.. – 2013-03-22 15:07:18

+1

我推薦,在解決DataReader的問題之後,立即研究Sql Injection問題。你的查詢有一個巨大的安全漏洞。 – Steve 2013-03-22 15:19:54

回答

2

一個DataReader只能與一個打開的連接有關。當您完成DataReader時,請確保您在重新使用之前關閉()它。

從MSDN: http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.80).aspx

+0

dr.close()正在關閉數據讀取器嗎? – user1795999 2013-03-22 15:11:08

+0

是的,只需調用Close()即可。你可以把它放在一個finally塊中,以確保它被稱爲 – PlantationGator 2013-03-22 15:17:36

+0

我已經把dr.close()結束了,如果block是對的? – user1795999 2013-03-22 15:20:16

0

1)拆下cmd.ExecuteNonQuery()。緊隨其後的ExecuteReader是您唯一需要的執行。 2)您必須爲插入命令使用不同的連接對象,或關閉以前的閱讀器。在循環連接到它的閱讀器時,不能重複使用相同的連接對象。所以,試試這個:

Dim con As MySql.Data.MySqlClient.MySqlConnection = New MySqlClient.MySqlConnection("server=localhost;user=root;database=zzz;port=3306;password;") 
con.Open() 
Dim cmd As MySqlClient.MySqlCommand 
Dim dr As MySqlClient.MySqlDataReader 
cmd = con.CreateCommand() 
cmd.CommandText = "select sino FROM customers WHERE sino =('" + serialno.Text + "')" 
dr = cmd.ExecuteReader() 
If dr.Read = False Then 
    'we have no existing record 
    dr.Close() 'close reader first 
    Dim sqlc As String 
    sqlc = "insert into customers values('" + serialno.Text + "','" + custname.Text + "','" + address.Text + "','" + phno.Text + "','" + eid.Text + "','" + event_type.Text + " ')" 
    Dim command As MySqlClient.MySqlCommand = New MySqlClient.MySqlCommand(sqlc, con) 
    command.ExecuteNonQuery() 
    MessageBox.Show(sqlc) 
    con.Close() 

Else 

    MsgBox("number already exists") 
    dr.Close() 

End If 
con.Close() 'close connection before leaving 
相關問題