2014-02-25 93 views
0

美好的一天,我有以下代碼:語法錯誤在更新語句在我的代碼

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    Dim cmd As New OleDb.OleDbCommand 
    Dim compDate As Date 
    Dim x As New Integer 
    Dim profID As New Integer 
    Dim date1 As New Date 
    compDate = Format(Date.Now, "hh:mm:ss, tt") 
    'MsgBox(compDate) 
    date1 = #8:00:00 AM# 
    profID = 201400001 
    x = 1 
    If Not cnn.State = ConnectionState.Open Then 
     cnn.Open() 
    End If 
    cmd.Connection = cnn 
    'Timer1.Start() 
    Timer1.Interval = 5000 
    sp.Close() 
    Try 
     sp.Open() 
    Catch 
     sp.Close() 
    End Try 
    If TextBox1.Text = "201400001" Then 
     If DateDiff(DateInterval.Minute, date1, Date.Now) > 5 Then 
      MsgBox("been here") 
      cmd.CommandText = "UPDATE test " & _ 
           "SET ProfLog" & x & "" & _ 
           "WHERE ProfID='" & Me.TextBox1.Text & "' AND ProfTime=#" & date1 & "#" 
      cmd.ExecuteNonQuery() 
      MsgBox("Did this") 
     End If 
     MsgBox("Done!") 
    ElseIf TextBox1.Text = "201400002" Then 
     MsgBox("Hello World Again!") 
    ElseIf TextBox1.Text = "201400003" Then 
     MsgBox("My Turn!") 
    End If 
    TextBox1.Clear() 
End Sub 

一旦達到cmd.ExecuteNonQuery,正在顯示一個語法錯誤。它說,有一個「UPDATE語句中的語法錯誤」,我想知道什麼是使我的程序出錯的語法。提前致謝。

+1

看起來好像在設置proflog列後有= =符號 – markg

+0

SQL注入警告 - 此代碼受SQL注入攻擊。不要通過字符串連接來構建語句,而應考慮使用參數化查詢。然後建立一個參數集合並用它執行查詢。更安全。 – STLDeveloper

+0

微軟是一家大公司,而不是一門編程語言。如果您在這裏需要幫助,您需要使用適當的標籤,以便能夠幫助您查看問題的人員。 –

回答

2

您的UPDATE語句有錯誤。你錯過了一個=SET ProfLog

"UPDATE test " & _ 
    "SET ProfLog = " & x & "" & _ 
    "WHERE ProfID='" & Me.TextBox1.Text & "' AND ProfTime=#" & date1 & "#" 

你可以通過顯示一個消息框,或在Visual Studio即時窗口的cmd.CommandText已經想通了這一點你自己。

請自己做一個巨大的好感並搜索「參數化查詢」或「SQL注入」。你應該學會從一開始就正確地做事,而不是學會做得不好,並在以後引發許多許多問題。