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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

OleDbException未處理…UPDATE語(yǔ)句中的語(yǔ)法錯(cuò)誤

OleDbException未處理…UPDATE語(yǔ)句中的語(yǔ)法錯(cuò)誤

牛魔王的故事 2019-07-22 10:10:07
OleDbException未處理…UPDATE語(yǔ)句中的語(yǔ)法錯(cuò)誤我調(diào)試時(shí)會(huì)出錯(cuò),請(qǐng)有人幫忙.以下是代碼: 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請(qǐng)幫幫忙
查看完整描述

1 回答

?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊

您應(yīng)該使用SQL參數(shù)。這些不僅會(huì)簡(jiǎn)化您的代碼,還會(huì)在語(yǔ)法和數(shù)據(jù)類(lèi)型方面造成某些類(lèi)型的錯(cuò)誤。不可能并防止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

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

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

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

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

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

  5. 上面的內(nèi)容還使用XML文本來(lái)構(gòu)造SQL。這對(duì)于長(zhǎng)而復(fù)雜的SQL非常方便,因?yàn)槟梢愿鶕?jù)自己的喜好格式化和縮進(jìn)它。您還可以使用多行使其可讀性:

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

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

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

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

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

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

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

有關(guān)更多信息,請(qǐng)參見(jiàn):


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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