VS2010 MySqlException未处理

时间:2011-06-08 15:24:22

标签: mysql vb.net visual-studio visual-studio-2010 forms

我是VB编程的新手,遇到了一个问题:(几天后试图解决这个问题需要一些帮助!

我正在尝试将一些信息从VB表单传递到我的MySQL数据库。我已将所有文本框命名为与数据库中的字段相同,并检查了所有正确的数据库字段和文本框名称。

当我尝试在表单中输入信息时,我有时会在代码的.executeNonQuery部分出现错误。

为了测试,我将SQLStatement字符串输出到一个文本框(正确地从文本框中拉出所有字段)然后手动将完成的SQL查询输入到数据库中并且它工作正常。但是当我尝试一次性执行此操作时,如果文本太多(如果我在每个字段中输入'a',它的工作原理),它似乎会失败。它们是否限制了可以从VB传递的SQL查询的大小?所有MySql数据库字段都设置为没有大小限制的文本。

提前致谢!!!

    Public Sub SaveQuote(ByRef SQLStatement As String)
    Dim cmd As MySqlCommand = New MySqlCommand

    With cmd
        .CommandText = SQLStatement
        .CommandType = CommandType.Text
        .Connection = SQLConnection
        .ExecuteNonQuery()
    End With
    SQLConnection.Close()
    MsgBox("successfully Added!")
    SQLConnection.Dispose()
End Sub

Private Sub CmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdSave.Click

    Dim SQLstatement As String = "INSERT INTO laptopstock(forename,surname,emailaddress,contactnumber,quotedate,manufacturer,model,os,battery,drive,defects) VALUES('" & forename.Text & "','" & surname.Text & "','" & emailaddress.Text & "','" & contactnumber.Text & "', CURDATE(),'" & manufacturer.Text & "','" & modelnumber.Text & "','" & os.Text & "','" & batterycondition.Text & "','" & drivetype.Text & "','" & defects.Text & "')"
    SaveQuote(SQLstatement)
End Sub

'测试SQL查询

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


    Dim testSQLstatement As String = "INSERT INTO laptopstock(forename,surname,emailaddress,contactnumber,quotedate,manufacturer,model,os,battery,drive,defects) VALUES('" & forename.Text & "','" & surname.Text & "','" & emailaddress.Text & "','" & contactnumber.Text & "', CURDATE(),'" & manufacturer.Text & "','" & modelnumber.Text & "','" & os.Text & "','" & batterycondition.Text & "','" & drivetype.Text & "','" & defects.Text & "')"


    testbox.Text = testSQLstatement

End Sub

这是testSQLstatement = testbox.text

的输出
    INSERT INTO laptopstock(forename,surname,emailaddress,contactnumber,quotedate,manufacturer,model,os,battery,drive,defects) VALUES('Joe','Bloggs','J.bloggs@jbloggs.com','07777777777', CURDATE(),'Sony','Vaio','Windows 7 Pro','Poor','DVD-Rom','Faulty Screen')

从我可以看到它的格式正确,当我直接将其输入MySql服务器上的查询时创建一条记录

1 个答案:

答案 0 :(得分:0)

您的应用程序SQL登录是否对此表具有插入权限?尝试直接在SQL控制台中执行授权语句: “在dbo.laptopstock上授予插入(在此处添加应用程序登录)” 另外,我为什么要传递SQLStatement byref?您没有修改它,因此请使用byval。这不应该影响代码,但这是一个很好的做法。

我看到你说有时你得到一个错误,所以我们可以认为它是工作代码。这让我相信它在您的输入数据中。字段是否接受空值?它们是正确的格式吗?此外,这些事情中的一个与其他事情不同,即日期。您正在插入中传递curdate()函数。如果字段都是您提到的字符串,则表示您正在执行从日期到字符串的隐式转换。您可以使用Vb.Net等效项轻松构建插入字符串。 (Date.Now.ToString)。

最后,如果没有更详细的信息,很难调试  错误。由于您尚未发布SQLConnection和MySLCommand对象的代码(确定您并不认为MySQLCommand为New SQLCommand),我必须假设它们有效。