MySql 异常未处理 - 命令执行期间遇到致命错误

Posted

技术标签:

【中文标题】MySql 异常未处理 - 命令执行期间遇到致命错误【英文标题】:MySql exception was unhandled - Fatal error encountered during command execution 【发布时间】:2014-04-25 11:06:41 【问题描述】:

问题属于这个按钮,我在这里得到错误:

objcommand.ExecuteNonQuery()

一旦我按下这个按钮,它应该会更新我的 mysql 数据库中的所有记录。这是我的代码(确切的代码适用于另一个表):

Private Sub btnModify1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModify1.Click
    Using objconnection = New MySqlConnection("Server=localhost;database=ba-solutions;user id=root;password=")
        objconnection.Open()
        If Len(cbxCompanyName.Text) < 1 Then
            MsgBox("Please select a company name")
            Return
        End If

        If Len(txtPosition.Text) < 1 Then
            MsgBox("Please enter the postion of the shareholder in the company")
            Return
        End If

        If Len(txtNI.Text) <> 8 Then
            MsgBox("The National Insurance Number must be 8 characters")
            Return
        End If

        If Len(txtAddressLine.Text) < 1 Then
            MsgBox("Enter a First Line of Address")
            Return
        End If

        If Len(txtCity.Text) < 1 Then
            MsgBox("Enter a City Name")
            Return
        End If

        If Len(txtPostcode.Text) < 1 Then
            MsgBox("Enter a Postcode")
            Return
        End If

        If Len(txtEmail.Text) < 1 Then
            MsgBox("Enter an Email Address")
            Return
        End If

        If Len(txtPhoneNumber.Text) <> 11 Then
            MsgBox("The Phone Number must be 11 numbers ")
            Return
        End If
        'all validations for relevant textboxes
        Dim companyname As String
        Dim position As String
        Dim ninumber As String
        Dim dob As String
        Dim forename As String
        Dim surname As String
        Dim addressline1 As String
        Dim city As String
        Dim postcode As String
        Dim phonenumber As String
        Dim email As String
        postcode = txtPostcode.Text
        companyname = cbxCompanyName.Text
        position = txtPosition.Text
        ninumber = txtNI.Text
        dob = DTP1.Value
        forename = txtForename.Text
        surname = txtSurname.Text
        addressline1 = txtAddressLine.Text
        city = txtCity.Text
        phonenumber = txtPhoneNumber.Text
        email = txtEmail.Text
        sqlstring = "UPDATE shareholder_details SET position=@position, ni=@ninumber, dob=@dob, forename=@forename, surname=@surname, addressline1=@addressline, city=@city, postcode=@postcode, phonenumber=@phone, email=@email where companyname=  @company "
        objcommand = New MySqlCommand(sqlstring, objconnection)
        objcommand.Parameters.AddWithValue("@company", companyname)
        objcommand.Parameters.AddWithValue("@postion", position)
        objcommand.Parameters.AddWithValue("@ni", ninumber)
        objcommand.Parameters.AddWithValue("@dob", dob)
        objcommand.Parameters.AddWithValue("@forename", forename)
        objcommand.Parameters.AddWithValue("@surname", surname)
        objcommand.Parameters.AddWithValue("@addressline", addressline1)
        objcommand.Parameters.AddWithValue("@city", city)
        objcommand.Parameters.AddWithValue("@postcode", postcode)
        objcommand.Parameters.AddWithValue("@phone", phonenumber)
        objcommand.Parameters.AddWithValue("@email", email)
        objcommand.ExecuteNonQuery()

        btnRefresh.PerformClick()

        Dim check As Integer = objcommand.ExecuteReader.RecordsAffected
        If check < 1 Then
            MessageBox.Show("Record was not updated, please try again", "Update unsucessfull",
    MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            MessageBox.Show("Record updated sucessfully", "Update sucessfull",
    MessageBoxButtons.OK, MessageBoxIcon.Information)
            objconnection.Close()
        End If
    End Using
End Sub

【问题讨论】:

错误信息是什么? 和之前一样的错误信息 【参考方案1】:

我使用的解决方案确实有效。 此错误主要是由缺少或拼写错误的参数声明引起的。例如。 @FirstName 错误地拼写为 @FirtName。

确保sql查询中声明的所有参数都在AddwithValue参数声明中声明。 (它有助于计算查询与 Addwithvalues)。

最好的解决方案是让 Visual Studio 提供有关缺失参数的信息。使用 Try-Catch 块。在 catch 块中使用 Messagebox.show(ex.Innerexception.Message) 而不是 Messagebox.show(ex.message)。这将显示缺少的 exact 参数。例如。下面

试试 conCommand.Parameters.Addwithvalue("@FirstName", txtFirstName.text) conCommand.Parameters.Addwithvalue("@MiddleName", txtMiddleName.text) conCommand.Parameters.Addwithvalue("@LastName", txtLastName.text) conCommand.Parameters.Addwithvalue("@PhoneNo", txtPhoneno.text) 将 ex 捕获为异常 Messagebox.show(ex.innerexception.Message) 结束尝试

希望这可以帮助。我们在编程世界中分享我们的想法真的很棒。感谢阅读。

如果您需要更多帮助。请通过 flashrescueagency@gmail.com 与我联系。我不是专业人士,但我在 Visual Studion (VB.NET)、SQL 客户端和 MySQL 客户端编程方面拥有丰富的经验。

【讨论】:

【参考方案2】:

你写

objcommand.Parameters.AddWithValue("@postion", position)

但这可能应该是

objcommand.Parameters.AddWithValue("@position", position)

其他问题可能是, 您的 SQL 语句中有 ni=@ninumber, 但是您在主机变量中使用objcommand.Parameters.AddWithValue("@ni", ninumber)

在您的 SQL 语句中,与您使用其他主机变量相比,companyname= @company 看起来不同

您能否尝试使用与 SQL 语句中相同的 objcommand.Parameters.AddWithValue("@host_variable", variable) 顺序

【讨论】:

有什么区别? 你写的两条建议没有区别? 仔细看! postionposition 之间的区别 ( "位置" != "位置" ) 我添加了一些我看到的其他问题

以上是关于MySql 异常未处理 - 命令执行期间遇到致命错误的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 异常 - 数据读取期间遇到致命错误

致命错误:未捕获的异常 PAYPAL

无法执行 php artisan 命令 [php 致命错误 [

致命:异常未在 C++ 中重新抛出

致命错误:未捕获的异常“PDOException”和消息“找不到驱动程序”

面试官:线程池执行过程中遇到异常会发生什么,怎样处理?