Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 什么';是什么导致我的更新语句不起作用?_Mysql_Vb.net - Fatal编程技术网

Mysql 什么';是什么导致我的更新语句不起作用?

Mysql 什么';是什么导致我的更新语句不起作用?,mysql,vb.net,Mysql,Vb.net,大家晚上好 我使用下面的代码试图更新MySQL数据库中的记录,但是这些记录没有被更新,我也没有捕获任何异常。我们将非常感谢您的帮助: dbConn = New MySqlConnection("Server=" & FormLogin.ComboBoxServerIP.SelectedItem & ";Port=3306;Uid=trojan;Password=horse;Database=accounting") Try If dbConn.State

大家晚上好

我使用下面的代码试图更新MySQL数据库中的记录,但是这些记录没有被更新,我也没有捕获任何异常。我们将非常感谢您的帮助:

dbConn = New MySqlConnection("Server=" & FormLogin.ComboBoxServerIP.SelectedItem & ";Port=3306;Uid=trojan;Password=horse;Database=accounting")
    Try
        If dbConn.State = ConnectionState.Open Then
            dbConn.Close()
        Else
            Try
                dbConn.Open()
                Dim dbAdapter As New MySqlDataAdapter("UPDATE customer " & _
                                                      "SET accountNumber= '" & TextBoxAccount.Text & "', nameLAST='" & TextBoxLastName.Text & "', nameFIRST='" & TextBoxFirstName.Text & "'" & _
                                                      "nameSALUTATION='" & ComboBoxSalutation.SelectedItem & "', nameCOMPANY='" & TextBoxCompanyName.Text & "', addressSTREET='" & TextBoxAddress1.Text & "'" & _
                                                      "addressSTREET1='" & TextBoxAddress2.Text & "', addressCITY='" & TextBoxCity.Text & "', addressSTATE='" & ComboBoxState.SelectedItem & "'" & _
                                                      "addressZIPCODE='" & MaskedTextBoxZip.Text & "', phone='" & MaskedTextBoxPhone.Text & "', fax='" & MaskedTextBoxFax.Text & "', email='" & TextBoxEmail.Text & "'" & _
                                                      "WHERE accountNumber='" & TextBoxAccount.Text & "';", dbConn)
            Catch ex As Exception
                MessageBox.Show("A DATABASE ERROR HAS OCCURED" & vbCrLf & vbCrLf & ex.Message & vbCrLf & _
                            vbCrLf + "Please report this to the IT/Systems Helpdesk at Ext 131.")
            End Try
            MessageBox.Show("Customer account SUCCESSFULLY updated!")
            Call lockForm()
        End If
    Catch ex As Exception
        MessageBox.Show("A DATABASE ERROR HAS OCCURED" & vbCrLf & vbCrLf & ex.Message & vbCrLf & _
                            vbCrLf + "Please report this to the IT/Systems Helpdesk at Ext 131.")
    End Try
    Call lockForm()
    dbConn.Close()

在本例中,我将使用,因为您不能以您试图使用的方式使用MySQLDataAdapter。另外,请使用参数,因为您所做的操作会使您面临SQL注入攻击。最后,您不需要更新accountNumber,因为您正在使用它来查找要更新的行

使用
MySQLCommand
而不是
MySQLDataAdapter
。您正在挫败使用ADONet的目的,因为您的代码仍然容易受到sql注入的攻击。使其参数化。下面是从您的代码中修改的代码。它使用
使用End Using
来正确处理对象处理

Dim ConnectionString As String ="Server=" & FormLogin.ComboBoxServerIP.SelectedItem & ";Port=3306;Uid=trojan;Password=horse;Database=accounting"
Dim iQuery As String = "UPDATE customer " & _
                       "SET accountNumber = @accountNumber, nameLAST = @nameLAST, nameFIRST = @nameFIRST, " & _
                       "    nameSALUTATION = @nameSALUTATION, nameCOMPANY = @nameCOMPANY, addressSTREET = @addressSTREET, " & _
                       "    addressSTREET1 = @addressSTREET1, addressCITY = @addressCITY, addressSTATE =  @addressSTATE, " & _
                       "    addressZIPCODE = @addressZIPCODE, phone = @phone, fax = @fax, email = @email               " & _
                       "WHERE accountNumber = @accountNumber"

Using dbConn As New MySqlConnection(ConnectionString)
    Using dbComm As New MySQLCommand()
        With dbComm
            .Connection = dbConn
            .CommandType = CommandType.Text
            .CommandText = iQuery
            .Parameters.AddWithValue("@accountNumber", TextBoxAccount.Text )
            .Parameters.AddWithValue("@nameLAST", TextBoxLastName.Text)
            .Parameters.AddWithValue("@nameFIRST", TextBoxFirstName.Text)
            .Parameters.AddWithValue("@nameSALUTATION", ComboBoxSalutation.SelectedItem)
            .Parameters.AddWithValue("@nameCOMPANY", TextBoxCompanyName.Text)
            .Parameters.AddWithValue("@addressSTREET", TextBoxAddress1.Text)
            .Parameters.AddWithValue("@addressSTREET1", TextBoxAddress2.Text)
            .Parameters.AddWithValue("@addressCITY", TextBoxCity.Text)
            .Parameters.AddWithValue("@addressSTATE", ComboBoxState.SelectedItem)
            .Parameters.AddWithValue("@addressZIPCODE", MaskedTextBoxZip.Text)
            .Parameters.AddWithValue("@phone", MaskedTextBoxPhone.Text)
            .Parameters.AddWithValue("@fax", MaskedTextBoxFax.Text)
            .Parameters.AddWithValue("@email", TextBoxEmail.Text)
        End With
        Try
            dbConn.Open
            dbComm.ExecuteNonQuery()

            MessageBox.Show("Customer account SUCCESSFULLY updated!")
            Call lockForm()
        Catch( ex as MySQLException)
            MessageBox.Show("A DATABASE ERROR HAS OCCURED" & vbCrLf & vbCrLf & ex.Message & vbCrLf & _
                                vbCrLf + "Please report this to the IT/Systems Helpdesk at Ext 131.")
        Finally
            dbConn.Close()
        End Try
    End Using
End Using

您正在查看更新的正确数据库吗?它是在测试中发生而不是在现场发生吗?是的,我使用的是正确的数据库。你没有看到任何消息框显示吗?你已经通过密码了吗?约翰,谢谢你的回复。我试过密码,但没用。我得到了一个异常,它说“发生了致命的数据库错误”,但没有提供除此之外的任何详细信息。此外,您还重复了accountNumber的参数。VB正在抛出一个异常,该异常表明该参数已被声明。另外,在USING语句的开头,您在WITH语句中指定了一个变量“dmComm”并使用“dbComm”——这只是一个输入错误吗?@kismetagbasic您可以再试一次吗?我刚刚更新了答案。还有其他的错误吗?约翰,它起作用了。VB仍然不喜欢accountNumber参数的重复,所以我删除了这一行,它起到了吸引人的作用。喂,你改变了什么?谢谢你的意见,迈克尔。