2012-04-18 61 views
0

我有问题要搜索和更新记录数据库sql。 这是我的代码。我使用MySQL数据库和Microsoft Visual Basic 2008如何在vb中搜索和更新记录mysql

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 

,但我有错误的字command.ExecuteNonQuery():个MySqlException了未处理。已经有与此连接相关联的打开的DataReader必须先关闭

+0

你知道如何保存登录与注销您的代码将是容易受到SQL注入 – 2012-04-18 13:38:14

回答

0

你需要使用一个单独的MySqlCommand对象,说command2While语句中,因为command已经在积极地利用:

Dim command2 As New MySqlCommand 
.. 
While data.Read() 
    .. 
    command2.Connection = objconn 
    .. 
End While 
+0

在数据库中使用vb 2008的时间。 – ieyla 2012-04-18 08:45:52

0

我会在一次调用数据库的过程中完成这一切,包括两条语句。我更习惯到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