- 論壇徽章:
- 0
|
最近在寫 SQL語句時因為引號引起的問題,所以查了點資料..綜合了一下下~--~
* 舉例時以 VB6.0為依據(jù);
* VB與VBScript不同的地方將分別說明;
* 數(shù)據(jù)庫連結用 ADO。
要點:
在 VB&VBScript中,標記字符串變量內容用雙引號,用兩個連續(xù)的雙引號表示字符串中
的雙引號;
在 SQL語法中,標記字符串變量內容用單引號,用兩個連續(xù)的單引號表示字符串中的單
引號。
在 VB&VBScript中訪問數(shù)據(jù)庫的時候最常用的是以下兩種語句:
1、選擇查詢(select),返回結果集;
2、動作查詢(update、insert、delete等),無結果集。
無論哪一種語句,經常需要根據(jù)用戶的輸入來構造符合 SQL語法的字符串,提交給連結
對象或結果集對象來執(zhí)行(open或 execute方法),在 VB&VBScript中,標記字符串變量內
容用雙引號,如
strSql="select * from UserList"
在 SQL語法中,標記字符串變量內容用單引號,如:
select * from UserList where UserName='MouseFly'
如果程序的窗口(瀏覽器的頁面)上有兩個文本框用于讓用戶輸入登記注冊的用戶信息
或者是查詢條件,假設用戶輸入了“MouseFly”、“1234”,需要登記到數(shù)據(jù)庫的一個用戶
注冊表 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')
這時再執(zhí)行的時候,會提示 SQL語法錯誤,原因就在于“12'3”中的單引號,由于在 SQL語
法中,標記字符串變量內容用單引號,因此“'12'3'”無法被正確識別,所以在組織字符串
的時候要考慮將用戶輸入的單引號替換成兩個連續(xù)的單引號,此時要用到Replace函數(shù):
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(" assword" 。
如果賦值的字段類型是數(shù)字型的,則要去掉字符串兩端的單引號,假設Password字段是
數(shù)值型,并且用戶輸入的是“1234”,則(此處略去數(shù)字輸入校驗):
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函數(shù)。 |
|