登入
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows.forms;
using system.data.sqlclient;
namespace winstudent
private
void
label1_click
(object sender,
eventargs e)
private
void
label2_click
(object sender,
eventargs e)
private
void
btnlogin_click
(object sender,
eventargs e)
if(string.
isnullorempty
(upwd)
)//與資料庫通訊,檢察輸入與資料庫是否一致
;//建立command物件
sqlcommand cmd =
newsqlcommand
(sql, conn)
; cmd.parameters.
clear()
;//先清空
cmd.parameters.
add(parauname)
; cmd.parameters.
add(userpwd)
;//新增陣列
//開啟連線
conn.
open()
;//最晚開啟,最早關閉
//執行命令,要求必修在連線狀態 opened
object o = cmd.
executescalar()
;//執行查詢結果返回第一行第一列的值,忽略其他行和列
//關閉連線
conn.
close()
;//處理結果
if(o ==
null
|| o == dbnull.value ||((
int)o)==0
)else
}//返回的結果進行不同的提示
}private
void
btnexit_click
(object sender,
eventargs e)
}}
但是這裡存在sql注入
修改內容:
//寫查詢語句
string sql =
"select count(1) from userinfo where username=@username and userpwd=@userpwd"
;//新增引數
sqlparameter parauname =
newsqlparameter
("username"
, uname)
;sqlparameter userpwd =
newsqlparameter
("userpwd"
, upwd)
;//建立command物件
sqlcommand cmd =
newsqlcommand
(sql, conn)
;cmd.parameters.
clear()
;//先清空
cmd.parameters.
add(parauname)
;cmd.parameters.
add(userpwd)
;
但是如果有多個引數,這樣寫就太複雜了
用陣列操作
sqlparameter[
] paras =
;
//新增陣列
//建立command物件
sqlcommand cmd =
newsqlcommand
(sql, conn)
;cmd.parameters.
addrange
(paras)
;
c 與鍊錶結合
用鍊錶管理貨物,用指標指向這個個鍊錶 定義乙個類goods 定義乙個goods next 方法buy head,w sale head 在buy中會呼叫有引數的建構函式,使得總重加上w,並且將新的貨物加入鍊錶,sale只使得貨物從鍊錶刪除即可,因為減重是自動呼叫析構函式得到的,因為sale中用了de...
C 結合GDAL實現中值濾波
private void btnmiddlefilter click object sender,eventargs e gdal.allregister 更改讀寫許可權 dataset srcds gdal.open openfilename,access.ga update datatype s...
c語言的左結合性與右結合性
右結合性,就是在表示式中最右邊的操作最先執行,然後從右到左依次執行 左結合性的操作符 如位操作符 和 則是從左至右依次執行 在標準c語言的文件裡,對操作符的結合性並沒有做出非常清楚的解釋。乙個滿分的回答是 它是仲裁者,在幾個操作符具有相同的優先順序時決定先執行哪乙個。每個操作符擁有某一級別的優先順序...