string str = string.empty;
int errorcount = 0;
private void btn_login_click(object sender, eventargs e)
//獲得連線字串
str =configurationmanager.connectionstrings["ctrcnn"].connectionstring;
#region 判斷超過三次鎖定
errorcount = geterror();
datetime errortime = getdatetime();
timespan span = datetime.now.subtract(errortime);
double theseconds = span.totalseconds;
if (errorcount>=3)
if (theseconds<15)
messagebox.show("你已經連續錯誤3次,已被系統鎖定,請在15秒之後再登入,或練習管理員");
return;
else
errorcount = 0;
updataerror(errorcount);
#endregion
#region 判斷使用者是否合法
datatable dt=getdatatable();
if (dt.rows.count<=0)
errorcount++;
updataerror(errorcount);
updatatime();
messagebox.show("你的帳號或密碼錯誤!");
else if(dt.rows.count>1)
else
messagebox.show("ok!");
#endregion
//從資料庫中讀取帳號密碼資料
private datatable getdatatable()
sqlconnection cnn = new sqlconnection(str);
sqlcommand cmm = new sqlcommand();
cmm.connection = cnn;
cmm.commandtext = "select * from t_user where username=@usernameand password=@password";
cmm.parameters.addwithvalue("@username", txtuser.text);
cmm.parameters.addwithvalue("@password", txtpassword.text);
cnn.open();
sqldataadapter adr = new sqldataadapter(cmm);
datatable dt = new datatable();
adr.fill(dt);
cmm.dispose();
cnn.dispose();
return dt;
//從資料空中讀取error次數
private int geterror()
sqlconnection cnn = new sqlconnection(str);
sqlcommand cmm = new sqlcommand();
cmm.connection = cnn;
cmm.commandtext = "select error from t_user whereusername=@username";
cmm.parameters.addwithvalue("@username", txtuser.text);
cnn.open();
object obj = cmm.executescalar();
cnn.close();
if (dbnull.value.equals(obj))
return 0;
else
return convert.toint32(obj);
//更改錯誤次數
private void updataerror(int errorcount)
sqlconnection cnn = new sqlconnection(str);
sqlcommand cmm = new sqlcommand();
cmm.connection = cnn;
cmm.commandtext = "update t_user set error=@error whereusername=@username";
cmm.parameters.addwithvalue("@error", errorcount);
cmm.parameters.addwithvalue("@username", txtuser.text);
cmm.executenonquery();
cnn.close();
//記錄登入錯誤time
private void updatatime()
sqlconnection cnn = new sqlconnection(str);
sqlcommand cmm = new sqlcommand();
cmm.connection = cnn;
cmm.commandtext = "update t_user set errortime=@errortime whereusername=@username";
cmm.parameters.addwithvalue("@errortime", datetime.now);
cmm.parameters.addwithvalue("@username", txtuser.text);
cnn.open();
cmm.executenonquery();
cnn.close();
//獲取資料庫時間
private datetime getdatetime()
sqlconnection cnn = new sqlconnection(str);
sqlcommand cmm = new sqlcommand();
cmm.connection = cnn;
cmm.commandtext = "select errortime from t_user whereusername=@username";
cmm.parameters.addwithvalue("@username", txtuser.text);
cnn.open();
datetime dt =convert.todatetime( cmm.executereader());
return dt;
使用者登入驗證完整版
對於講課來說,能否正確,清晰,易懂的表達自己的想法很重要,今天再講連線查詢的時候就深有體會,為了讓別人明白自己再說什麼,可以說是想盡辦法。後來發現,原來世界上最美妙的聲音就是聽眾的一聲拉著長音的 奧 當然是不帶拐彎的 下面將登入驗證的完整版的 貼在這裡,其中當前時間和最後一次登入錯誤時間的比較吸取了...
BingoCard遊戲完整版(內含注釋)
html charset utf 8 make your own bingo cardtitle src js jquery 3.3.1.min.js script rel stylesheet href bingocard.css src bingocard.js script head ceat...
完整版websocket帶資料庫
use swoole coroutine as co class swoolechat n this ws push request fd,hello,welcome n 監聽websocket收到資訊 this ws on message function ws,frame n self onme...