學生用戶管理系統(二)
接著上一條隨筆。
這個用戶管理系統能夠實現從sql server 數據庫中的一張表讀取用戶名和密碼來看是否與用戶輸入的相同,相同則進入另一個頁面,否則跳messagebox.
若用戶沒有註冊,該系統也提供了註冊功能,如果註冊的用戶名重復了,系統會提示用戶已重復。(這個功能研究的我最長時間,哎,醉了)如果沒重復,
則成功註冊,用戶就可以通過註冊後的用戶登陸進去系統進入我們另一個頁面了。
進入正題,
跟數據庫連接時需要寫出數據庫的連接字符串,有兩種形式。
即有Windows身份驗證和SQL server 身份驗證兩種。
//sql server 身份驗證 連接字符串 privatestring ConnstrSqlServer = "server=服務器名稱;uid=登錄名稱;pwd=登錄密碼;database=數據庫名稱"; //windows 身份驗證連接字符串 private string ConnstrWindows = "server=服務器名稱;database=數據庫名稱;Trusted_Connection=SSPI";
(如果忘了sql server身份驗證的密碼,可以通過windows身份驗證進入查看數據庫用戶名,然後可以修改密碼)
連接數據庫需要sqlconnection,還有數據表查詢字符串。
只要前面的連接字符串以及sqlconnection 無誤,基本可以打開數據庫了(sqlconnection.open())
string sqlstring = "server=ZJX-PC;uid=sa;pwd=;database=zjx"; SqlConnection conn = new SqlConnection(sqlstring); conn.Open(); string sql = "Select * from info where id=‘" + this.textBox1.Text.Trim() + "‘ and sw=‘" + this.textBox2.Text.Trim() + "‘"; //要執行的 sql 語句 string sql2 ="Select id from info where id =‘" + this.textBox1.Text.Trim() + "‘";
此時需要一個sqlcommand的類來 解讀 這個sql的語句
SqlCommand cmd = new SqlCommand(sql, conn);
如果執行的sql解讀不對,可以用 sqlconnection 判斷,即打開連接的時候出錯,就把他try一下,就是說明用戶名密碼有問題,直接報messagebox。
此時我加了一個判斷,不加應該也可以。
SqlDataReader dateReader = cmd.ExecuteReader(); if (dateReader.Read()) { MessageBox.Show("即將進入畫面"); timer1.Start(); conn.Dispose(); conn.Close();
SqlDataReader dateReader = cmd.ExecuteReader(); 意思就是把解讀的結果放到datereader這個實例中,下面判斷如果讀到東西了,更加說明有,即進入系統,因為數據庫連接為非托管系統,需要手動釋放內存,不加也可以,我不太太清楚後果如何,等學到了在研究內存釋放吧。
註冊用戶:
string sqlstring = "server=ZJX-PC;uid=sa;pwd=zjx28963436;database=zjx"; SqlConnection conn = new SqlConnection(sqlstring); if (textBox1.Text != "" && textBox2.Text != "") { conn.Open(); string sql = " insert into info(id,sw) values (‘" + textBox1.Text + "‘," + "‘" + textBox2.Text + "‘) "; //要執行的 sql 語句 string sql2 ="Select id from info where id =‘" + this.textBox1.Text.Trim() + "‘"; SqlCommand cmd = new SqlCommand(sql, conn);//同登錄 SqlCommand cmd2 = new SqlCommand(sql2, conn);
跟上面相同的操作,要在數據庫字符串中寫清想要的功能。
cmd.CommandText = sql;
這行是為了執行sql語句放入儲存器中。
接著是
int i = int.Parse(cmd.ExecuteNonQuery().ToString());
cmd.ExecuteNonQuery()這個可以返回你執行後受影響的行數,即你插入了用戶名密碼,執行成功,返回值至少大於0。
防止用戶重復:
bb = cmd2.ExecuteScalar().ToString();
我用ExecuteScalar()這個方法來判斷,他的用法是 執行查詢,然後返回查詢後的結果在第一行第一列,就是只返回一個數據。
我的查詢是sql2,意思是查找相同的用戶名,如果有相同的,則返回相同用戶名的名字,如果沒有,則產生null,於是我用try catch 來判斷 即實現了功能。
最後還有一個就是
Application.DoEvents();
這個功能是為了防止窗口假死,但是處理速度會慢一點,在多循環的時候可以用上。
學生用戶管理系統(二)