上次我们说了默认登录名和登录密码的登陆窗体,下面我们来看看和数据库连接起来的登陆窗体。

这次我们要先做好一个数据库,再起中创建两张表,①一张方用户登陆信息;②另一张是我们要传到主窗体上的表。我们要做的就是通过与数据库的连接,判断用户输入的登录名和登录密码是否正确,正确的话,把登录名传到主窗体中,再把我们做好的另一张表的信息显示在主窗体上。

先来看看我们的登录窗体中是怎么写的:

//声明一个委托,并将登录名传进去,用来传值public delegate void SendLoginIdHandler(string loginId);public partial class frmLogin : Form{//定义一个事件public event SendLoginIdHandler SendLoginIdEvent;public frmLogin(){InitializeComponent();}//定义一个状态变量bool flag = false;/// /// 确定按钮的Click事件,我们要通过点击确定按钮,/// 来触发这个事件,并判断输入的用户名和密码是否正确/// 这次我们是通过连接上数据库来判断,事先在数据库中填好/// 用户信息,查找并判断/// /// /// 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);}//输入正确,将状态变量设为trueflag = true;//关闭登录窗体this.Close();}else{//如果登陆不成功的话,将状态变量设置为falseflag = false;//并显示一个提示框,提示登陆失败MessageBox.Show("登录名或密码错误","登录提示",MessageBoxButtons.OK,MessageBoxIcon.Information);}}/// /// 判断登陆/// 在这里面连接上数据库,并把用户输入的值与数据库中的值比较,并返回比较的结果/// /// 用户输入的登录名/// 用户输入的登陆密码/// 
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();}/// /// 主窗体的加载事件,在这个窗体显示之前最后一个被触发的事件/// /// /// 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;}/// /// 填充控件,在登陆成功之后,显示主窗体的时候将控件填充/// 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);}}}

看看登陆成功后主窗体中是怎么显示的:

通过这个登陆窗体,我们就能看到在登陆以后我们可以在主窗体中做我们想做的事,还可以很好的与数据库联系起来,让他们之间可以交流。

加油!!!!