0

レコードデータベースのSQLを検索して更新するのに問題があります。これは私のコードです。私はmysqlデータベースとMicrosoft Visual Basic 2008を使用しています

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim t As New Threading.Thread(AddressOf closeMsgbox)
    objconn = New MySqlConnection("server=localhost;database=AAA;userid=root;password= 'root'")
    Dim username As Boolean = True
    objconn.Open()
    Dim sqlquery As String = "SELECT * FROM daftar WHERE nid = '" & FormRegister.TextBox1.Text & "';"
    Dim data As MySqlDataReader
    Dim adapter As New MySqlDataAdapter
    Dim command As New MySqlCommand
    command.CommandText = sqlquery
    command.Connection = objconn
    adapter.SelectCommand = command
    data = command.ExecuteReader
    If data.HasRows() = True Then
        While data.Read()
            FormRegister.Show()
            tkhupd = Now.ToString("yyyy-MM-dd HH:mm:ss")
            command.Connection = objconn
            command.CommandText = "UPDATE visitor SET tkhupd  ='" & tkhupd & "' WHERE                      nokp = '" & FormRegister.TextBox1.Text & "';"
            command.ExecuteNonQuery()
            MessageBox.Show("You're has logout")
            FormRegister.TextBox1.Text = ""
            username = False
            Me.Close()
        End While
    Else
        FormRegister.Show()
        username = True
    End If
    data.Close()
    If username = True Then
        Dim sqlquery2 As String = "INSERT INTO visitor (nid)VALUES ('" & FormRegister.TextBox1.Text & "')"
        Dim data2 As MySqlDataReader
        Dim adapter2 As New MySqlDataAdapter
        Dim command2 As New MySqlCommand
        command2.CommandText = sqlquery2
        command2.Connection = objconn
        adapter2.SelectCommand = command2
        data2 = command2.ExecuteReader
        MessageBox.Show("You're has login")
        Form4.Show()
        FormRegister.TextBox1.Text = ""
        Me.Close()
    End If
End Sub

しかし、Word command.ExecuteNonQuery(): MySqlException was unhandled でエラーが発生しました。この接続に関連付けられている開いている DataReader が既に存在し、最初に閉じる必要があります

4

2 に答える 2

0

これは、2 つのステートメントで構成されるデータベースへの 1 回の呼び出しですべて実行します。私は Sql Server に慣れているので、この構文は少しずれているかもしれませんが、次のようになります。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim sqlquery As String = _
         "DECLARE @RowCount Int;" & _
         " UPDATE FROM visitor v" & _
            " INNER JOIN daftar d ON d.nid = v.nokp" & _
            " SET v.tkhupd = current_timestamp" & _
            " WHERE d.nid = ?NID;" & _
         " SELECT row_count() INTO @RowCount;" & _
         " IF @RowCount = 0 THEN " & vbCrLf & _
            " INSERT INTO visitor (nid) VALUES (?NID);" & vbCrLf & _
         " END IF"

    Using conn As New MySqlConnection("server=localhost;database=AAA;userid=root;password= 'root'"), _
          cmd As New MySqlCommand(sqlquery, conn)

        cmd.Parameters.Add("?NID", MySqlDbTypes.Int).Value = Integer.Parse(FormRegister.TextBox1.Text)
        conn.Open()
        cmd.ExecuteNonQuery()
    End Using
End Sub
于 2012-04-18T14:01:53.867 に答える
0

はすでにアクティブに使用されているため、たとえばステートメント内で別のMySqlCommandオブジェクトを使用する必要があります。command2Whilecommand

Dim command2 As New MySqlCommand
..
While data.Read()
    ..
    command2.Connection = objconn
    ..
End While
于 2012-04-18T01:05:32.230 に答える