2011-06-08 55 views
0

我是新來的VB編程和幾天試圖解決這個需要一些幫助後所遇到的問題:(!VS2010個MySqlException了未處理

我試圖從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','[email protected]','07777777777', CURDATE(),'Sony','Vaio','Windows 7 Pro','Poor','DVD-Rom','Faulty Screen') 

輸出從我可以看到它的格式是否正確,當我直接進入該在MySql服務器上創建一個查詢

+0

不要使用像那樣的字符串連接來構建查詢。它使您容易受到SQL注入攻擊。 – 2012-03-11 19:52:36

回答

0

您的應用程序SQL登錄是否有inse rt在這張桌子上的權利?嘗試在SQL控制檯中直接執行授權聲明: 「授予在dbo.laptopstock上插入(在此添加應用程序登錄)」 另外,我爲什麼要傳遞SQLStatement byref?你沒有修改它,所以使用byval。這不應該影響代碼,但這是一個很好的做法。

我看到你說,有時你會得到一個錯誤,所以我們可以推測它是工作代碼。這讓我相信它是在你的輸入數據中。田野是否接受空值?他們是正確的格式?此外,其中一件事情不像其他日子那樣。您正在傳入插入中的curdate()函數。如果這些字段都像您提到的那樣是字符串,那麼您正在執行從日期到字符串的隱式轉換。您可以使用Vb.Net等價物輕鬆構建插入字符串。 (Date.Now.ToString)。

最後,如果沒有關於 錯誤的更多詳細信息,則很難進行調試。由於您尚未爲您的SQLConnection和MySLCommand對象發佈代碼(當然,您不是指MySQLCommand作爲新的SQLCommand),我必須假定它們工作。