第一次写c#,之前写过qt,写起来觉得跟qt的winform挺相像的。
完成基本的功能之后,后续有时间的话会优化一下。
首先把一个主界面窗体先创建好,叫它mainwindows,作为登录后的跳转。
创建一个login.cs,把主要的控件拖进去。
两个作为输入的textbox,三个按钮button,还有两个显示说明label。
此章主要是登录模块。
trim() 的功能:删除字符串首部和尾部的空格,函数执行成功时返回删除了string字符串首部和尾部空格的字符串。
设置一个判断,为空的话返回。
string loginname = loginnametextBox.Text.Trim();
string loginpwd = loginpwdtextBox.Text.Trim();
if (String.IsNullOrEmpty(loginname) || String.IsNullOrEmpty(loginpwd))
{
MessageBox.Show("用户名或密码不能为空!");
return;
}
然后进行sql的连接,我这次用的是sql server 08版本的。(using System.Data.SqlClient;)完成后我试一下用mysql,其实原理也是一样,主要导入相对应的驱动。
SqlConnection conn = new SqlConnection("server=服务器名;uid=用户;pwd=密码;database=数据库名");
string sql = "SELECT name,password from login where name=@username and password=@pwd";
SqlCommand cmd = new SqlCommand(sql, conn);//sql是需要执行的语句字符串,conn是连接对象
conn.Open();//打开conn
/*
ADO.Net操作sql Server数据库的五大对象:
SqlConnection类:创建数据库连接对象
SqlCommand类:执行SQl语句对象
SqlDataReader类:创建一个查询一条或多条数据的对象
SqlDataAdapter类:创建一个用于检索和保存数据的对象
DataSet类:创建一个本地数据存储对象
*/
cmd.Parameters.Add(new SqlParameter("@username", SqlDbType.NVarChar));
cmd.Parameters["@username"].Value = loginname;
cmd.Parameters.Add(new SqlParameter("@pwd", SqlDbType.NVarChar));
cmd.Parameters["@pwd"].Value = loginpwd;
//cmd.ExecuteNonQuery();
SqlDataReader check = cmd.ExecuteReader();//存储数据集
用cmd.Parameters.Add()方法添加参数到参数集,能有效防止sql注入。(1' or '1'='1)
方法里面的第一个参数是要添加的参数名,第二个参数是参数的数据类型。Parameters的作用就是把存储过程执行结束后得到的参数传到程序里。
以下为判断。(功能实现没什么问题,主要还可以做一个优化,把密码错误和用户存不存在分开。)
登录成功做了一个跳转,跳转到mainwindows。
if (!check.Read())
{
MessageBox.Show("用户不存在或密码错误!");
loginnametextBox.Text = "";
loginpwdtextBox.Text = "";
conn.Close();
}
else if (check["password"].ToString().Trim() == loginpwd)
{
MessageBox.Show("登录成功!");
conn.Close();
mainwindows new_form = new mainwindows();
new_form.Owner = this;
this.Hide();
new_form.ShowDialog();
Application.ExitThread();
}
/*else
{
MessageBox.Show("密码错误!");
loginpwdtextBox.Text = "";
conn.Close();
}
*/
登录成功的界面:
失败:
sql表只做了简单的设置,作为登录的测试。
后续:完成注册模块功能。待完成全系统之后,可能会进行一些美化。