using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace LoginProject
{
public partial class FrmLogin : Form
{
public FrmLogin()
{
InitializeComponent();
}
private void btnYes_Click(object sender, EventArgs e)
{
SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
scsb.DataSource = "SK-20220626HGWR";
scsb.InitialCatalog = "test";
scsb.UserID = "sa";
scsb.Password = "123456";
string user_id = txtUser.Text;
string user_pwd = txtPwd.Text;
if (user_pwd==""||user_id=="" )
{
MessageBox.Show("请输入用户名或密码");
return; //直接结束事件
}
SqlConnection conn = new SqlConnection(scsb.ToString());
if (conn.State == System.Data.ConnectionState.Closed) //判断连接的开启状态,如果是关闭的则打开
conn.Open();
string str = "Select*from userinfo WHERE [user_id ]='" + user_id + "'";
// string str = "Select*From userinfo WHERE [user_id]='" + user_id + "' AND [user_pwd]='"+user_pwd+"'"; 方法二
//string str1 = "Select*from userinfo WHERE [ user_pwd]='" + user_pwd + "'";
SqlCommand comm = new SqlCommand(str, conn);
//对于每个关联的 SqlConnection,一次只能打开一个 SqlDataReader,在第一个关闭之前,打开另一个的任何尝试都将失败。
//类似地,在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为它提供服务,直到调用 Close 时为止。
SqlDataReader scb = comm.ExecuteReader();
string rs="" ;
//string rs1 = "";
//如果存在多个行,则为 true;否则为 false
// 看在数据库中是否查询到相关信息,若为true,说明用户名正确,就不用如下把用户名和账号都验证了
if (scb.Read())
{
// MessageBox.Show("登录成功"); 方法二
//
//
//
rs = scb["user_pwd"].ToString();
if (rs == user_pwd)
{
MessageBox.Show("登录成功");
}
else
{
MessageBox.Show("密码错误");
}
}
else
{
MessageBox.Show("用户不存在");
}
scb.Close();
//SqlCommand comm1 = new SqlCommand(str1, conn);
//SqlDataReader scb1 = comm.ExecuteReader();
//while (scb1.Read())
//{
// rs1 = scb1["user_pwd"].ToString();
//}
//if (rs == user_id &&
// rs1 == user_pwd)
// MessageBox.Show("登录成功");
//else
//{
// MessageBox.Show("登录失败");
//}
}
}
}
还缺少将密码明文设置为密文的方法。
获得的经验:
在while、if 、for内定义的变量,函数外不能调用,若想调用则需声明在外,若函数内给变量赋值了,函数外变量能接受该值。但声明变量时必须赋值,string赋值“”,否则调用该变量时报错未赋值(其实函数内已赋值,但不知道为啥报错)
代码中
if ((user_pwd==""||user_id=="" )
应该为:
if (string.IsNullOrEmpty(user_pwd)||string.IsNullOrEmpty(user_id))
IsNullOrEmpty()方法 指定字符串是null还是emoty,返回bool