1、简介:
最近在搞一个使用C#窗体的RFID期末答辩,这里边用的编译器是VS2022,其中用到了MySQL实现的一个登录操作。这里记录一下。
2、效果:
在程序运行之后,弹出这么一个窗口,提示输入用户名和密码(这个颜色是单独设置的)。
- 点击登录按钮,进行对用户名和密码进行在数据库中进行判别,有则登录到别的窗体(可自由设置)。
- 点击注册按钮,进行用户名和密码的注册操作,写入到数据库的。
3、需要准备的东西
-
需要在本项目中安装MySQL插件,当然你的电脑中也要安装MySQL。在项目中安装插件的具体操作:
-
点击打开
-
进入到这个页面搜索MySQL,如图,点击安装,当然如果安装最新版的MySQL插件,可能会报错。说是当前的窗体框架版本太低了,这时候要么修改自己项目的框架,要么选择安装低版本的MySQL插件。
-
勾选安装到本项目,安装好之后,就能在本项目中使用MySQL数据库了。
-
-
数据库和表已经设计好了(前提是把MySQL安装好了,并且有实例化的数据库),比如我这里就用到了个用户表,它的结构如下,可根据具体需求设计:
4、详细设计
-
打开VS2022,选择创建C#窗体程序,进入到窗体的设计页面,进行窗体的设计,这里比较简单,就用到了lable、textBox、Button(注意才按钮的下边我还弄了个lable的信息提示标签):
-
双击登录按钮,进入登录按钮的单击事件代码编写如下:
private void button_logon_Click(object sender, EventArgs e) {//这个函数名称可能不一样,我这里改了button的名字的 //那两个textBox的名字也要根据自己的更改 string pswd = textBox_Pswd.Text.ToString(); //获取密码框文本 string usrname = textBox_UsrName.Text.ToString(); //获取用户名文本 //创建数据库对象 MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder(); //用户名 builder.UserID = "root"; //密码 builder.Password = "1234"; //服务器地址,这里MySQL一般在本地的,都是这个 builder.Server = "localhost"; //连接时的数据库名字 builder.Database = "my_db_01"; try { //定义与数据连接的链接 MySqlConnection connection = new MySqlConnection(builder.ConnectionString); //打开这个链接 connection.Open(); //编写的SQL查询语句,查询数据库中是否有这个用户并且密码相等 string strcmd = "SELECT COUNT(*) FROM rfid_usr WHERE name = @epc and pswd = @pswd"; MySqlCommand cmd = new MySqlCommand(strcmd, connection); cmd.Parameters.AddWithValue("@epc", usrname); cmd.Parameters.AddWithValue("@pswd", pswd); int count = Convert.ToInt32(cmd.ExecuteScalar()); if (count == 1) //这里我在登录按钮下边用的一个提示lable label_Info.Text = "登录成功!"; else { label_Info.Text = "用户名错误或者密码错误!"; textBox_Pswd.Text = ""; } connection.Close(); // 关闭连接 } catch (MySqlException ex) { // 处理数据库异常 MessageBox.Show("数据库操作出现异常:" + ex.Message, "错误"); } catch (Exception ex) { // 处理其他异常 MessageBox.Show("发生了未知错误:" + ex.Message, "错误"); } //如果提示信息为登录成功则切换到别的工作界面 if (label_Info.Text == "登录成功!") { // 隐藏当前窗体 this.Hide(); // 创建 main.cs 窗体的实例,这里的Main是另一个窗体文件的名字,两个Main都要改 Main loginFrom = new Main(); // 显示 main.cs 窗体 loginFrom.ShowDialog(); // 关闭当前登录窗体(可选) this.Close(); } }
5、全部代码实现
//这里必须加上这个,才能使用MySql
using MySql.Data.MySqlClient;
using System;
using System.Windows.Forms;
namespace QiMoDaZuoYe
{
//这里我的窗体名称叫logon,根据实际情况复制
public partial class logon : Form
{
public logon()
{
InitializeComponent();
button_lonin.Text = "注册";
button_logon.Text = "登录";
label_Info.Text = "";
/*textBox_UsrName.Text = "wyl";
textBox_Pswd.Text = "123";*/
}
//注册按钮单击事件,这里主要是切换到另一个页面进行注册操作
private void button_Concel_Click(object sender, EventArgs e)
{
// 隐藏当前窗体
this.Hide();
// 创建 Form1.cs 窗体的实例
Form1 loginFrom = new Form1();
// 显示 Form1.cs 窗体
loginFrom.ShowDialog();
// 关闭当前登录窗体(可选)
this.Close();
}
//登录按钮单击事件
private void button_logon_Click(object sender, EventArgs e)
{
string pswd = textBox_Pswd.Text.ToString();
string usrname = textBox_UsrName.Text.ToString();
MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
//用户名
builder.UserID = "root";
//密码
builder.Password = "1234";
//服务器地址
builder.Server = "localhost";
//连接时的数据库
builder.Database = "my_db_01";
try {
//定义与数据连接的链接
MySqlConnection connection = new MySqlConnection(builder.ConnectionString);
//打开这个链接
connection.Open();
string strcmd = "SELECT COUNT(*) FROM rfid_usr WHERE name = @epc and pswd = @pswd";
MySqlCommand cmd = new MySqlCommand(strcmd, connection);
cmd.Parameters.AddWithValue("@epc", usrname);
cmd.Parameters.AddWithValue("@pswd", pswd);
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count == 1)
label_Info.Text = "登录成功!";
else
{
label_Info.Text = "用户名错误或者密码错误!";
textBox_Pswd.Text = "";
}
connection.Close(); // 关闭连接
}
catch (MySqlException ex)
{
// 处理数据库异常
MessageBox.Show("数据库操作出现异常:" + ex.Message, "错误");
}
catch (Exception ex)
{
// 处理其他异常
MessageBox.Show("发生了未知错误:" + ex.Message, "错误");
}
if (label_Info.Text == "登录成功!")
{
// 隐藏当前窗体
this.Hide();
// 创建 main.cs 窗体的实例
Main loginFrom = new Main();
// 显示 main.cs 窗体
loginFrom.ShowDialog();
// 关闭当前登录窗体(可选)
this.Close();
}
}
}
}
全部整体的代码实现,就如上图所示,根据自身的情况修改之后(注意看代码中的注释),其整体代码编写还是很容易实现的,对C#来说,整体的语法风格感觉还是跟C++类似,而且还有VS2022这样的优秀编译器,使用效果还不错,就是软件也太大了。那么这次的分享就这样了,下次不知道又是多久写了。