登陸窗體(二)

上次我們說了默認登錄名和登錄密碼的登陸窗體,下面我們來看看和數據庫連接起來的登陸窗體。

這次我們要先做好一個數據庫,再起中創建兩張表,①一張方用戶登陸信息;②另一張是我們要傳到主窗體上的表。我們要做的就是通過與數據庫的連接,判斷用戶輸入的登錄名和登錄密碼是否正確,正確的話,把登錄名傳到主窗體中,再把我們做好的另一張表的信息顯示在主窗體上。

先來看看我們的登錄窗體中是怎麼寫的:

//聲明一個委託,並將登錄名傳進去,用來傳值
public delegate void SendLoginIdHandler(string loginId);
public partial class frmLogin : Form
{
//定義一個事件
public event SendLoginIdHandler SendLoginIdEvent;
public frmLogin()
{
InitializeComponent();
}
//定義一個狀態變量
bool flag = false;
/// <summary>
/// 確定按鈕的Click事件,我們要通過點擊確定按鈕,
/// 來觸發這個事件,並判斷輸入的用戶名和密碼是否正確
/// 這次我們是通過連接上數據庫來判斷,事先在數據庫中填好
/// 用戶信息,查找並判斷
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOk_Click(object sender, EventArgs e)
{
//取值
string loginId = this.txtLoginId.Text;
string loginPwd = this.txtLoginPwd.Text;
//通過調用函數來判斷輸入的信息是否正確
bool b = checkLogin(loginId,loginPwd);
if (b)
{
//輸入正確的話,我們就判斷事件是否爲空,如果不是空的話,就激發這個事件
if (SendLoginIdEvent != null)
{
//激發事件
SendLoginIdEvent(loginId);
}
//輸入正確,將狀態變量設爲true
flag = true;
//關閉登錄窗體
this.Close();
}
else
{
//如果登陸不成功的話,將狀態變量設置爲false
flag = false;
//並顯示一個提示框,提示登陸失敗
MessageBox.Show("登錄名或密碼錯誤","登錄提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
/// <summary>
/// 判斷登陸
/// 在這裏面連接上數據庫,並把用戶輸入的值與數據庫中的值比較,並返回比較的結果
/// </summary>
/// <param name="loginId">用戶輸入的登錄名</param>
/// <param name="loginPwd">用戶輸入的登陸密碼</param>
/// <returns></returns>
private bool checkLogin(string loginId, string loginPwd)
{
string sql = "select *from Users where loginId=@loginId And loginPwd=@loginPwd";
string connString = "server=.\\sqlexpress;uid=sa;pwd=199298;database=SchoolDB";
SqlConnection connection = new SqlConnection(connString);
SqlCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
SqlParameter p1 = new SqlParameter("@loginId", loginId);
SqlParameter p2 = new SqlParameter("loginPwd", loginPwd);
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
connection.Open();
SqlDataReader sdr = cmd.ExecuteReader();
bool result = sdr.Read();
connection.Close();
return result;
}
//如果登錄失敗,就關閉應用程序
private void frmLogin_FormClosing(object sender, FormClosingEventArgs e)
{
if (flag==false)
{
Application.Exit();
}
}
}

再來看看主窗體中的寫法:

public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
/// <summary>
/// 主窗體的加載事件,在這個窗體顯示之前最後一個被觸發的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void frmMain_Load(object sender, EventArgs e)
{
//創建一個frmLogin對象,在主窗體顯示之前先顯示登錄窗體。
frmLogin frm = new frmLogin();
//訂閱委託事件
frm.SendLoginIdEvent += new SendLoginIdHandler(frm_SendLoginIdEvent);
//將登錄窗體顯示出來
frm.ShowDialog();
//填充主窗體中的ListView控件
FillListView();
}
//在事件被激發以後,將登錄名傳到主窗體中
void frm_SendLoginIdEvent(string loginId)
{
this.label1.Text = loginId;
}
/// <summary>
/// 填充控件,在登陸成功之後,顯示主窗體的時候將控件填充
/// </summary>
private void FillListView()
{
//SQL語句
string sql = "select*from Students";
//連接字符串
string connString = "server=.\\sqlexpress;uid=sa;pwd=199298;database=SchoolDB";
//創建一個連接對象,將連接字符串傳進去
SqlConnection connection = new SqlConnection(connString);
//創建一個命令對象
SqlCommand cmd = connection.CreateCommand();
//將SQL語句給命令對象
cmd.CommandText = sql;
//創建一個數據表對象
DataTable dt = new DataTable();
//填充一個數據庫命令和數據庫連接
SqlDataAdapter sda = new SqlDataAdapter(cmd);
//填充數據表對象
sda.Fill(dt);
//遍歷數據數據表中的每一行
foreach (DataRow row in dt.Rows)
{
//取值,將遍歷到的每一行的值分別給對應的字段
int id = (int)row["id"];
string name = (string)row["name"];
string cardId = (string)row["cardId"];
string phone = (string)row["phone"];
string qq = (string)row["qq"];
//創建一個ListViewItem對象,將得到的數據放到控件的每一列中去
ListViewItem lvi = new ListViewItem();
//填充值
lvi.Text = id.ToString();
lvi.SubItems.Add(name);
lvi.SubItems.Add(cardId);
lvi.SubItems.Add(phone);
lvi.SubItems.Add(qq);
//將創建的這個對象的值加到控件中去
this.listView.Items.Add(lvi);
}
}
}

看看登陸成功後主窗體中是怎麼顯示的:

175022628.png

通過這個登陸窗體,我們就能看到在登陸以後我們可以在主窗體中做我們想做的事,還可以很好的與數據庫聯繫起來,讓他們之間可以交流。

加油!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章