SqlParameter引數化查詢

2021-07-16 07:19:28 字數 2803 閱讀 8523

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...