top
Loading...
關于SQL語句中的引號問題(VB&VBScript)
最近在網上看到不少網友因為在寫 SQL語句時因為引號引起的問題,我在剛開始用VB的
時候也經常犯這樣或那樣的錯誤,這次將使用的經驗寫出來與大家共享。

* 舉例時以 VB6.0為依據;
* VB與VBScript不同的地方將分別說明;
* 數據庫連結用 ADO。

要點:
在 VB&VBScript中,標記字符串變量內容用雙引號,用兩個連續的雙引號表示字符串中
的雙引號;
在 SQL語法中,標記字符串變量內容用單引號,用兩個連續的單引號表示字符串中的單
引號。

在 VB&VBScript中訪問數據庫的時候最常用的是以下兩種語句:
1、選擇查詢(select),返回結果集;
2、動作查詢(update、insert、delete等),無結果集。

無論哪一種語句,經常需要根據用戶的輸入來構造符合 SQL語法的字符串,提交給連結
對象或結果集對象來執行(open或 execute方法),在 VB&VBScript中,標記字符串變量內
容用雙引號,如
strSql="select * from UserList"
在 SQL語法中,標記字符串變量內容用單引號,如:
select * from UserList where UserName="MouseFly"

如果程序的窗口(瀏覽器的頁面)上有兩個文本框用于讓用戶輸入登記注冊的用戶信息
或者是查詢條件,假設用戶輸入了“MouseFly”、“1234”,需要登記到數據庫的一個用戶
注冊表 UserList中,則SQL字符串應如下組織:
strSql="insert into UserList (UserName,Password) values (" & _
""" & me.txtUserName.text & ""," & _
""" & me.txtPassword.text & "")"
生成的結果為:
insert into UserList (UserName,Password) values ("MouseFly","1234")
但是如果用戶輸入中包含了單引號,如“12"3”,按照上面的組織方法則為:
insert into UserList (UserName,Password) values ("MouseFly","12"3")
這時再執行的時候,會提示 SQL語法錯誤,原因就在于“12"3”中的單引號,由于在 SQL語
法中,標記字符串變量內容用單引號,因此“"12"3"”無法被正確識別,所以在組織字符串
的時候要考慮將用戶輸入的單引號替換成兩個連續的單引號,此時要用到Replace函數:
strSql="insert into UserList (UserName,Password) values (" & _
""" & replace(me.txtUserName.text,""","""") & ""," & _
""" & replace(me.txtPassword.text,""","""") & "")"
結果為:
insert into UserList (UserName,Password) values ("MouseFly","12""3")
如果使用的是VBScript則me.txtUserName.text和me.txtPassword.text要換成相應的瀏覽器
提交的內容,如request.form("UserName")和request.form("Password")。
如果賦值的字段類型是數字型的,則要去掉字符串兩端的單引號,假設Password字段是
數值型,并且用戶輸入的是“1234”,則(此處略去數字輸入校驗):
strSql="insert into UserList (UserName,Password) values (" & _
""" & me.txtUserName.text & ""," & _
me.txtPassword.text & ")"
生成的結果為:
insert into UserList (UserName,Password) values ("MouseFly",1234)

如果字段類型是日期型,在 ADO中和處理字符串差不多,只不過要注意日期型字段的格
式,最好在組織 SQL字符串的時候對日期進行格式化保證年份是4位,如:
strSql="insert into UserList (UserName,Password,BirthDay) values (" & _
""" & me.txtUserName.text & ""," & _
me.txtPassword.text & "," & _
""" & format(me.txtBirth.text,"yyyy-mm-dd") & "")"
生成的結果為:
insert into UserList (UserName,Password,BirthDay) values
("MouseFly",1234,"1975-01-15")
如果使用的是VBScript,對日期進行格式化使用FormatDatetime函數。
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗