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)
顺序
【讨论】:
有什么区别? 你写的两条建议没有区别? 仔细看! postion 和 position 之间的区别 ( "位置" != "位置" ) 我添加了一些我看到的其他问题以上是关于MySql 异常未处理 - 命令执行期间遇到致命错误的主要内容,如果未能解决你的问题,请参考以下文章
无法执行 php artisan 命令 [php 致命错误 [