2014-03-03 101 views
0

我不知道這是否已被回答,但我在插入語句時出現語法錯誤。 繼承人我的代碼,我使用的Visual Basic 2010和MS Access 2010作爲我的數據庫INSERT INTO語句中的語法錯誤visual basic

Imports System.Data.OleDb 
Imports Comprehensive.Form1 
Public Class Form2 
Dim cnn As New OleDb.OleDbConnection 
Private Sub RefreshData() 
    If Not cnn.State = ConnectionState.Open Then 
     cnn.Open() 
    End If 
    Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM items ORDER BY ID", cnn) 
    Dim dt As New DataTable 
    da.Fill(dt) 
    Form1.DataGridView1.DataSource = dt 
    cnn.Close() 
End Sub 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim cmd As New OleDbCommand 
    Try 
     If Not cnn.State = ConnectionState.Open Then 
      cnn.Open() 
     End If 


     cmd.Connection = cnn 
     cmd.CommandText = "INSERT INTO Items (Item_Name, Item_Type, Date_Added)" + "'VALUES('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "');'" 
     cmd.ExecuteNonQuery() 
     RefreshData() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message & " - " & ex.Source) 
     cnn.Close() 
    End Try 



End Sub 

Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    'TODO: This line of code loads data into the 'ShitdataDataSet.Items' table. You can move, or remove it, as needed. 
    Me.ItemsTableAdapter.Fill(Me.ShitdataDataSet.Items) 
    cnn = New OleDb.OleDbConnection 
    cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=shitdata.mdb;" 
End Sub 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    Me.Close() 
End Sub 

末級

+2

主要[SQL注入](https://xkcd.com/327/)問題,在VALUES之前和結尾之後應該沒有''''''。 –

+0

您在'VALUES'子句之前有一個額外的單引號,並且列列表中的close palenthesis和'VALUES'關鍵字之間應該有一個空格,並且在您的語句結尾處還有一個額外的單引號。 –

+0

[給我參數化的SQL,或給我死亡](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)!!! –

回答

1

的INSERT行包含VALUES關鍵字前和結束不需要單引號sql語句,刪除它們

(Item_Name, Item_Type, Date_Added) VALUES(....) 
            ^^^   ^^^ 

但像往常一樣,你不用這樣寫sql命令。
應始終使用參數化查詢(SQL Injections

cmd.Connection = cnn 
    cmd.CommandText = "INSERT INTO Items (Item_Name, Item_Type, Date_Added)" & _ 
         "VALUES(?, ?, ?)" 
    cmd.Parameters.AddWithValue("@p1", TextBox1.Text) 
    cmd.Parameters.AddWithValue("@p2", TextBox2.Text) 
    cmd.Parameters.AddWithValue("@p3", TextBox3.Text) 
    cmd.ExecuteNonQuery() 

而且,作爲最後一個音符,請記住,如果你在你的表有一個日期時間(因爲它應該)爲DATE_ADDED領域,那麼你需要將textbox3值轉換爲日期時間。

如果是這種情況,那麼我建議查看this question,其中在訪問數據庫中插入日期時間值的問題已得到解決。

+0

哇那是快速回復,無論如何感謝的人,這解決了y的問題,猜測我所擔心的是更新和刪除程序 – user3375678

+0

按鈕參數化查詢?我第一次聽到這個消息,而我的教授沒有討論任何有關這方面的內容,我想除了聽我的老師之外,我還需要做更多的研究 – user3375678

+0

當然,請看[Isaksson先生]評論中的鏈接(http:// stackoverflow.com/users/477878/joachim-isaksson)或我的一個更正式的問題討論(確實是一個大問題) – Steve

相關問題