2013-10-18 49 views
0

我是VB.net(2周)的新用戶,來自PHP背景,我發現它很難。我創建了一個小表單,它應該將一些數據插入到訪問mdb數據庫中。不過,我不斷收到一個錯誤信息:這哪裏錯誤發生我在粘貼代碼概述VB2010數據庫插入查詢拋出異常錯誤

System.Data.OleDb.OleDbException 

,並請將哪裏出了問題有人能指出。非常感謝。

Imports System.Data.OleDb 

Public Class frmMain 

    Dim strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\domain\storage1.mdb" 

    Dim cnnOLEDB As New OleDbConnection(strConnectionString) 
    Dim cmdOLEDB As New OleDbCommand 
    Dim cmdInsert As New OleDbCommand 
    Dim cmdUpdate As New OleDbCommand 
    Dim cmdDelete As New OleDbCommand 
    Dim cmd As OleDbCommand 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    End Sub 


    Private Sub btnInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInsert.Click 
     Dim first, last As String 
     Dim age As Integer 

     first = txtFirstName.Text 
     last = txtLastName.Text 
     age = txtAge.Text 

     Dim InsertQuery As String 

     InsertQuery = "INSERT INTO Details (first,last,age) VALUES ('" & first & "','" & last & "','" & age & "')" 

     cnnOLEDB.Open() 
     Dim cmd As OleDbCommand = New OleDbCommand(InsertQuery, cnnOLEDB) 
     cmd.Parameters.AddWithValue("first", txtFirstName.Text) 
     cmd.Parameters.AddWithValue("last", txtLastName.Text) 
     cmd.Parameters.AddWithValue("age", txtAge.Text) 


     cmd.ExecuteNonQuery() <--- ERROR 
     cnnOLEDB.Close() 
     MessageBox.Show("Insert complete.") 
    End Sub 
End Class 
+0

感謝您告訴我們錯誤在哪裏,這很有幫助。將來,告訴我們錯誤是什麼。錯誤的類型「System.Data.OleDb.OleDbException」只是沒有什麼幫助,應該有一個錯誤消息說「數據類型不匹配:字符串的類型不能轉換爲數字」或類似的東西那。如果您不確定哪條消息是我正在討論的,請在您的代碼周圍放置TRY/CATCH,然後將ex.ToString()提供給我們。 – Steve

+0

@Steve謝謝關於try/catch的建議。將來會使用。 – user1532468

回答

1

的問題是在這裏:

InsertQuery = "INSERT INTO Details (first,last,age) VALUES ('" & first & "','" & last & "','" & age & "')" 

cmd.Parameters.AddWithValue("first", txtFirstName.Text) 
cmd.Parameters.AddWithValue("last", txtLastName.Text) 
cmd.Parameters.AddWithValue("age", txtAge.Text) 

試試這個:

InsertQuery = "INSERT INTO Details (first,last,age) VALUES (@first, @last, @age)" 

那麼對於參數:

cmd.Parameters.AddWithValue("@first", txtFirstName.Text) 
cmd.Parameters.AddWithValue("@last", txtLastName.Text) 
cmd.Parameters.AddWithValue("@age", txtAge.Text) 

然後,您可以刪除這些行,你不要不需要他們:

Dim first, last As String 
Dim age As Integer 

first = txtFirstName.Text 
last = txtLastName.Text 
age = txtAge.Text 
+0

謝謝你的幫助 – user1532468

1

FirstLast是Jet 4.0的保留字。它們不應該用作列名。 Access本身可以讓你擺脫困境,SQL代碼不會寬容。如果你不能避免使用這些單詞,試着將它們放在方括號[first]中。有關保留字的更多信息,請參見http://support.microsoft.com/kb/248738

+0

謝謝你的幫助 – user1532468