1

コーディングでこのエラーが発生しています。何が問題なのか教えてください。そしてそれを修正する方法

この接続に関連付けられている開いている DataReader が既に存在し、最初に閉じる必要があります。このサブでは、if 部分でデータを取得し、else 部分でデータを挿入しています。条件が満たされない場合。そのため、else の部分で上記のエラーが発生しています

コードは:

 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
4

2 に答える 2

2

DataReader は、開いている 1 つの接続にのみ関連付けることができます。DataReader の使用が終了したら、再利用する前に必ず Close() してください。

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

于 2013-03-22T15:09:23.413 に答える
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
于 2013-03-22T15:27:15.230 に答える