上次我们说了默认登录名和登录密码的登陆窗体,下面我们来看看和数据库连接起来的登陆窗体。
这次我们要先做好一个数据库,再起中创建两张表,①一张方用户登陆信息;②另一张是我们要传到主窗体上的表。我们要做的就是通过与数据库的连接,判断用户输入的登录名和登录密码是否正确,正确的话,把登录名传到主窗体中,再把我们做好的另一张表的信息显示在主窗体上。
先来看看我们的登录窗体中是怎么写的:
//声明一个委托,并将登录名传进去,用来传值 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); } } }
看看登陆成功后主窗体中是怎么显示的:
通过这个登陆窗体,我们就能看到在登陆以后我们可以在主窗体中做我们想做的事,还可以很好的与数据库联系起来,让他们之间可以交流。
加油!!!!
转载于:https://blog.51cto.com/7607889/1304425