關於SQL語句中的引號問題(VB&VBScript)

關於SQL語句中的引號問題(VB&VBScript)
 
 
作者佚名 來源InterNet 加入時間:2005-4-4
最近在網上看到不少網友因爲在寫 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函數。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章