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

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

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

//声明一个委托,并将登录名传进去,用来传值
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

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

加油!!!!