第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

OleDbException未處理…UPDATE語句中的語法錯誤

OleDbException未處理…UPDATE語句中的語法錯誤

牛魔王的故事 2019-07-22 10:10:07
OleDbException未處理…UPDATE語句中的語法錯誤我調(diào)試時會出錯,請有人幫忙.以下是代碼: Private Sub UpdateToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UpdateToolStripMenuItem.Click    If MsgBox("Save Changes?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "WARNING") = MsgBoxResult.Yes Then         Dim oleDC As New OleDbCommand        With oleDC            .Connection = conn            .CommandText = "UPDATE tblPatientsRecord SET Names='" & txtNames.Text & _        "',Licensenumber='" & txtLicensenumber.Text & _        "',Address='" & txtAddress.Text & _        "',Fullname='" & txtFullname.Text & _        "',Birthday='" & txtBase.Text &         "',Age='" & txtAge.Text & _        "',Country='" & cmbCountry.Text & "'  WHERE PatientID='" & txtPatientID.Text & "'"             .ExecuteNonQuery()             MsgBox("Record Updated!", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "SUCCESS")             Disable()             Clear()             SaveToolStripMenuItem.Enabled = False             NewToolStripMenuItem.Enabled = True             LoadPatientsRecord()             getLastPatientID()         End With     End IfEnd Sub請幫幫忙
查看完整描述

1 回答

?
臨摹微笑

TA貢獻1982條經(jīng)驗 獲得超2個贊

您應(yīng)該使用SQL參數(shù)。這些不僅會簡化您的代碼,還會在語法和數(shù)據(jù)類型方面造成某些類型的錯誤。不可能并防止SQL注入攻擊:

Dim sql = <sql> 
        UPDATE tblPatientsRecord SET [Names] = @p1,
                Licensenumber = @p2, 
                Address = @p3,
                Fullname = @p4,
                Birthday = @p5, 
                [Age] = @p6,
                Country = @p7
        WHERE PatientID = @p8        </sql>.Value

Using conn = New OleDbConnection(myConnStr),
        cmd As New OleDbCommand(sql, conn)

    conn.Open()

    cmd.Parameters.Add("@p1", OleDbType.VarChar).Value = txtNames.Text
    cmd.Parameters.Add("@p2", OleDbType.VarChar).Value = txtLicensenumber.Text    ' ...etc
    cmd.Parameters.Add("@p6", OleDbType.Integer).Value = intVar
    cmd.Parameters.Add("@p7", OleDbType.VarChar).Value = strVar    'the last one is the WHERE
    cmd.Parameters.Add("@p8", OleDbType.VarChar).Value = Convert.ToInt32(lblPatientID.Text)

    cmd.ExecuteNonQuery()
    '... etcEnd Using

還有其他幾個常見的問題,應(yīng)該加以處理。

  1. DBConnection對象用于創(chuàng)建、使用和處理而不是一次又一次的重復使用。但是,你能,會,可以使用全局連接字符串,這樣就不會到處都有相同的連接字符串。

  2. 許多應(yīng)該處理dbObjects。Using塊將關(guān)閉并釋放連接和命令對象。一般情況下,如果某物Dispose方法,將它們包裝在Using封鎖。上面展示了如何“堆?!?個對象(OleDbConnectionOleDbCommand)合而為一Using語句減少縮進。

  3. 使用Add方法而不是AddWithValue..這允許您為每個參數(shù)指定datataype。沒有它,DB提供程序必須猜測會導致Datatype mismatch或者在某些情況下甚至損壞數(shù)據(jù)庫。

  4. 這個WHERE子句只是另一個參數(shù)。..通常,人們會為SQL的第一部分使用參數(shù),但對于WHERE子句則使用級聯(lián)。

  5. 上面的內(nèi)容還使用XML文本來構(gòu)造SQL。這對于長而復雜的SQL非常方便,因為您可以根據(jù)自己的喜好格式化和縮進它。您還可以使用多行使其可讀性:

    Dim sql = "UPDATE tblPatientsRecord SET [Names] = @p1, " _        & "Licensenumber = @p2, " _        & "Address = @p3, "

  6. 如果你用SQL保留字或表名或列名中的空格,則必須轉(zhuǎn)義這些名稱。使用[Square Brackets]如圖所示。最好不要在名字中使用任何一種。UserPassword NamesValues是用作列或表名的常用單詞,這些名稱會導致SQL語法錯誤。

  7. 蜱不是通用的sql字段分隔符,它們實際上表明傳遞的值是字符串/文本:& "Age ='" & txtAge.Text & "'"..如果DB被設(shè)置為存儲Age作為一個數(shù)字,您的SQL將它作為文本/字符串傳遞,這會導致data type mismatch..同樣的道理也適用于PatientIDBirthday如果是日期字段。

    SQL語句串連字符串的一個常見問題是太多或太少的滴答聲(')在結(jié)果中。這在SQL參數(shù)中是不可能發(fā)生的。

但是,SQL參數(shù)的主要用途是防止名稱為“O‘Brian”或“O’Reilly”或“鮑比”;“放下桌子”(TblPatientsRecord)

這些原則適用于其他DB提供程序,例如MySqlSQLiteSQLServer..然而,細節(jié)(如確切的轉(zhuǎn)義字符)將有所不同。

請注意,Access/OleDB實際上并不是使用這樣命名的參數(shù)(@FirstName甚至@p2),所以經(jīng)常會看到以“?”的形式出現(xiàn)的平行線。這意味著必須添加參數(shù)值(Add/AddWithValue以同樣的順序當這些列出現(xiàn)在SQL中時。

有關(guān)更多信息,請參見:


查看完整回答
反對 回復 2019-07-22
  • 1 回答
  • 0 關(guān)注
  • 439 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號