簡體   English   中英

嘗試更新記錄,不斷收到此錯誤vb.net

[英]Trying to update record, keep getting this error vb.net

我確定這個問題對您來說很容易... :)我只是在嘗試使用以下方法更新數據庫中的現有記錄:

    Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click

    If Not cnn.State = ConnectionState.Open Then
        cnn.Open()
    End If

    cmd2.Connection = cnn
    cmd2.CommandText = "UPDATE HireItemRecord SET HireItemBeginDate = " & TextBox45.Text & _
     " ,HireItemEndDate = " & TextBox44.Text & _
     " ,HireItemCost = " & TextBox16.Text & _
     " ,PaymentMethod = " & TextBox17.Text & _
     " ,Staff_Id = " & TextBox19.Text & _
     " ,HireItemNotes = " & TextBox18.Text & _
     " ,HireItemReturnDate = " & TextBox43.Text & _
     "WHERE HireRecord_Id = " & TextBox13.Text

    cmd2.ExecuteNonQuery()

    ds1.Clear()
    daHireItemRecord.Fill(ds1, "PersonDetails")
    cnn.Close()

End Sub

但是,無論選擇什么記錄以及框中的任何詳細信息,我都會一遍又一遍地收到相同的錯誤:SqlException未處理未正確的語法'12'附近。

當文本框中絕對沒有任何內容時,錯誤將更改為:','附近的語法不正確。

我對此很陌生,我似乎無法理解為什么會這樣。 非常感謝您的幫助。 :)

這太不對了。

  1. 每個逗號后都需要一個空格,而不是前一個空格。
  2. 在查詢中使用它們之前,應先轉義它們的值。 如果我在您的任何文本框中輸入“ 0 WHERE 1 = 1-”,它將破壞整個表格。
  3. 您應該始終正確命名表單控件。 如果我在一年后讓您返回此代碼,並告訴您TextBox44出現問題,您知道這意味着什么嗎? 您的變量也一樣。 有時,可以將ixtbl用作變量名,但通常它們應具有描述性。


#2的示例,其中將“'1/1/1999'WHERE 1 = 1-”放入TextBox45:

`UPDATE HireItemRecord SET HireItemBeginDate = '1/1/1999' WHERE 1=1 -- , HireItemEndDate...`

--之后的所有內容都會變成評論,因此您得到了以下信息:

 `UPDATE HireItemRecord SET HireItemBeginDate = '1/1/1999' WHERE 1=1`

您能想象如果執行該查詢會發生什么? 沒什么好的。

您應該按照此問題中的建議使用參數化查詢: 避免從C#代碼在MSSQL Server上注入SQL的算法?

您永遠不應使用字符串連接來構建SQL。 它使您容易受到SQL注入攻擊的影響。 嘗試使用.Net中提供的SQLCommand對象 這使您可以“參數化”查詢,而不必擔心在何處放置“和”。

它還將允許您自然地添加參數,而不必將其轉換為字符串。 像這樣:

Dim command As New SqlCommand("SELECT * FROM Table", connection)
command.Parameters.Add("@ID", SqlDbType.Int)
command.Parameters("@ID").Value = customerID

在這里從有關SQL參數的文檔中竊取了該代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM