2013-06-24 14:30
2999人閱讀收藏
舉報
【.net架構】(18)
上篇部落格寫了關於重構**用到的
sqlhelper
類,這個類包括四種函式,根據是否含參和是否有返回值各分兩種。在這裡寫寫傳參過程用到的
sqlparameter。
如果我們使用如下拼接
sql字串的方式進行資料庫操作存在指令碼注入的危險:
[vb]view plain
copy
print?
dimsql
asstring
= "insert into t_loginlog(userid,logindate,logintime,computer)values('"
+ enloginlog.user_userid +
"','"
& enloginlog.user_logindate &
"','"
& enloginlog.user_logintime &
"','"
& enloginlog.user_computer &
"')"
為了防止
sql注入,我們採用引數化查詢的方式。
執行帶引數的sql增刪改語句或儲存過程
的函式如下:
[vb]view plain
copy
print?
'''
''' 執行帶引數的sql增刪改語句或儲存過程
'''
''' 增刪改語句或儲存過程
''' 命令型別文字或儲存過程
''' 引數陣列
''' 受影響的行數
'''
public
function
executenonquerycan(
byval
cmdtext
asstring
, byval
cmdtype
ascommandtype,
byval
paras
assqlparameter())
asinteger
dimconn = getconn()
dimcmd
assqlcommand =
newsqlcommand(cmdtext, conn)
dimres
asinteger
cmd.commandtype = cmdtype
cmd.parameters.addrange(paras)
tryres = cmd.executenonquery()
catch
ex as
exception
msgbox(ex.message, , "資料庫操作"
) finally
ifconn.state = connectionstate.open
then
conn.close()
endif
endtry
return
res
endfunction
在這裡定義了
cmdtext
(以sql
語句為例)、
cmdtype
和paras
,在dal
層呼叫sqlhelper
時,只需傳入相應的引數即可。其中,
paras
引數部分構成如下:
[vb]view plain
copy
print?
'''
''' 定義乙個函式在使用者輸入使用者名稱密碼正確並登入時將登入資訊記錄到t_login正在值班教師表中
'''
''' t_login表所對應的實體
'''
'''
public
function
insertintotlogin(
byval
enlogin
asentity.enlogin)
asboolean
enlogin.user_computer = system.environment.machinename
enlogin.user_logindate = datestring
enlogin.user_logintime = timeofday
dimsql
asstring
= "insert into t_login(userid,logindate,logintime,computer)values(@userid,@logindate,@logintime,@computer)"
dimparas
assqlparameter() =
dimsh
assqlhelper =
newsqlhelper
ifsh.executenonquerycan(sql, commandtype.text, paras) > 0
then
return
true
else
return
false
endif
endfunction
說到底還是封裝的思想,我們將可能輸入有誤的地方以引數的形式固定下來,通過傳參很好的解決了這個問題。
頂3
踩
SqlParameter類 帶引數的SQL語句
sqlparameter 類 表示 sqlcommand 的引數,也可以是它到 dataset 列的對映。無法繼承此類。命名空間 system.data.sqlclient 程式集 system.data 在 system.data.dll 中 舉例1 string strconn data sou...
SqlParameter類 帶引數的SQL語句
sqlparameter 類 表示 sqlcommand 的引數,也可以是它到 dataset 列的對映。無法繼承此類。命名空間 system.data.sqlclient 程式集 system.data 在 system.data.dll 中 舉例1 string strconn data sou...
SqlParameter類 帶引數的SQL語句
sqlparameter 類 表示 sqlcommand 的引數,也可以是它到 dataset 列的對映。無法繼承此類。命名空間 system.data.sqlclient 程式集 system.data 在 system.data.dll 中 舉例1 string strconn data sou...