用C# Winforms创建登录和注册系统
近年来,许多开发者都在使用C#来开发他们的应用程序。在本教程中,我们将通过一个简单的例子来说明如何用C#创建一个基本的用户认证。
简介
C#或C-sharp是一种由微软开发的面向对象的编程语言。C#或C-sharp运行在一个称为.Net框架的框架上。
该语言创造了许多应用程序,如。
- 网络应用程序
- 移动应用程序
- 计算机游戏
- 桌面应用程序
- 数据库应用
- 虚拟现实应用
先决条件
要跟上这篇文章,最好能有以下条件。
- 一个编辑器,在我的案例中,我将使用[Visual Studio]。
- 一些基本的C#和SQL知识。
- 关于如何运行关系型数据库管理的知识,在这种情况下,我们将使用[MySQL]。
- Visual Studio知识以及如何创建项目。
第一步:创建一个数据库和带有所需列的表
Create database userdata;
创建表的命令。
CREATE TABLE `user_info` ( `id` INT NOT NULL AUTO_INCREMENT , `names` VARCHAR(50) NOT NULL , `username` VARCHAR(20) NOT NULL , `password` VARCHAR(50) NOT NULL , PRIMARY KEY (`id`)) ;
第二步:创建一个项目
通过点击File -> New -> Project
,然后选择Visual C#,创建一个Visual Studio项目。在窗口中,选择Windows Forms App(.Net Framework)。给你的应用程序起个名字。然后点击确定。该项目将带有默认的表单,名为Form 1。
第三步:创建一个配置类来执行MySQL查询
由于C#是面向对象的,我们将创建一个类来处理我们将在程序中使用的查询的执行。
从解决方案资源管理器窗口中右击并选择添加->新项目->类。将该类命名为Config.cs,然后点击添加按钮。
- 通过右键单击解决方案资源管理器窗口添加MySQL.Data库,然后管理Nuget包,然后搜索MySQL.Data库并安装。
- 添加以下类来帮助执行MySQL查询。
Config.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
//add this for MessageBox
using System.Windows.Forms;
// add data function classes
using System.Data;
namespace LoginSysten
{
public class Config
{
string ConectionString = ""; // save connection string
public MySqlConnection connection = null;
public string server = "127.0.0.1";// MySQL host / ip of the computer
public string user = "root";// MySQL user
public string password = "";// MySQL password
DataSet ds;
DataTable dt;
public string Table = "user_info"; // initialize db table
public string ConnectionType = "";
string RecordSource = "";
DataGridView tempdata;
public Config()
{
}
// function to connect to the database
public void Connect(string database_name)
{
try
{
ConectionString = "SERVER=" + server + ";" + "DATABASE=" + database_name + ";" + "UID=" + user + ";" + "PASSWORD=" + password + ";";
connection = new MySqlConnection(ConectionString);
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
}
// Function to execute select statements
public void ExecuteSql(string Sql_command)
{
nowquiee(Sql_command);
}
// creates connection to MySQL before execution
public void nowquiee(string sql_comm)
{
try
{
MySqlConnection cs = new MySqlConnection(ConectionString);
cs.Open();
MySqlCommand myc = new MySqlCommand(sql_comm, cs);
myc.ExecuteNonQuery();
cs.Close();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
// function to execute delete , insert and update
public void Execute(string Sql_command)
{
RecordSource = Sql_command;
ConnectionType = Table;
dt = new DataTable(ConnectionType);
try
{
string command = RecordSource.ToUpper();
//======================if sql contains select==========================================
MySqlDataAdapter da2 = new MySqlDataAdapter(RecordSource, connection);
DataSet tempds = new DataSet();
da2.Fill(tempds, ConnectionType);
da2.Fill(tempds);
//======================================================================================
}
catch (Exception err) { MessageBox.Show(err.Message); }
}
// function to bring selected results based on column name and row index
public string Results(int ROW, string COLUMN_NAME)
{
try
{
return dt.Rows[ROW][COLUMN_NAME].ToString();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
return "";
}
}
// function to bring selected results based on column index and row index
public string Results(int ROW, int COLUMN_NAME)
{
try
{
return dt.Rows[ROW][COLUMN_NAME].ToString();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
return dt.Rows[ROW][COLUMN_NAME].ToString();
}
}
// Execute select statement
public void ExecuteSelect(string Sql_command)
{
RecordSource = Sql_command;
ConnectionType = Table;
dt = new DataTable(ConnectionType);
try
{
string command = RecordSource.ToUpper();
MySqlDataAdapter da = new MySqlDataAdapter(RecordSource, connection);
ds = new DataSet();
da.Fill(ds, ConnectionType);
da.Fill(dt);
tempdata = new DataGridView();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
// count Number of rows after selecy
public int Count()
{
return dt.Rows.Count;
}
}
}
- 现在我们有了Config.cs,我们可以执行任何MySQL语句。
第四步:创建注册窗口表单
在Microsoft Visual Studio中,创建一个新项目。从左角的文件子菜单中选择项目->添加Windows窗体,给窗体起个名字Register
,然后点击添加。
我们有两个Windows窗体类,即Form1.cs和Register.cs。
第五步:设计登录和注册界面
登录表单
- 在解决方案资源管理器中点击Form1.cs,在显示的表单中,添加三个按钮,两个文本框,和两个标签。
第一个按钮将是注册按钮,用来启动注册表单。第二个按钮将是登录按钮。当第二个按钮被点击时,它将用输入的信息查询数据库。第二个按钮将执行登录的MySQL查询。第三个按钮将关闭该应用程序。
第一个文本框将允许为登录输入用户名,而第二个文本框将启用密码的输入。这两个输入将被传递给SQL。
标签将显示这两个文本框的功能。
注册表格
- 在解决方案资源管理器中点击Register.cs,在显示的表单中添加两个按钮、三个文本框和三个标签。
第一个按钮将是一个注册按钮,用于保存输入的数据,第二个按钮将是一个退出按钮,用于关闭注册表单。
第一个文本框将允许输入用户的名字。第二个文本框将允许输入用户的用户名。第三个文本框是用来输入密码的。
标签将或显示这三个文本框的功能。
第六步:登录逻辑
- 在Form1.cs中初始化配置文件,使我们能够轻松地访问数据库。
// Initialize the connection class
Config db = new Config();
public Form1()
{
InitializeComponent();
// pass the database you want to connect to
db.Connect("userdata");
}
在点击注册按钮时,添加以下代码。
// start register window
Register register = new Register();
register.Show();
在点击登录按钮时,添加以下代码。
// querry MySQL database for the data passed from textboxes
db.ExecuteSelect("SELECT * FROM `user_info` where username='" + textBox1.Text+ "' and password ='" + textBox2.Text+"'");
if (db.Count() == 1)
{
MessageBox.Show("Success You will Login as"+db.Results(0, "names"));
}
else
{
MessageBox.Show("Wrong username and password combination" );
}
当点击退出按钮时,添加下面的代码。
private void button3_Click(object sender, EventArgs e)
{
// closes the application
Environment.Exit(0);
}
最后Form1.cs。
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;
namespace LoginSysten
{
public partial class Form1 : Form
{
// Initialize the connection class
Config db = new Config();
public Form1()
{
InitializeComponent();
// pass the database you want to connect to
db.Connect("userdata");
}
private void button1_Click(object sender, EventArgs e)
{
// querry MySQL database for the data passed from textboxes
db.ExecuteSelect("SELECT * FROM `user_info` where username='" + textBox1.Text+ "' and password ='" + textBox2.Text+"'");
if (db.Count() == 1)
{
MessageBox.Show("Success You will Login as"+db.Results(0, "names"));
}
else
{
MessageBox.Show("Wrong username and password combination" );
}
}
private void button2_Click(object sender, EventArgs e)
{
// start register window
Register register = new Register();
register.Show();
}
private void button3_Click(object sender, EventArgs e)
{
// closes the application
Environment.Exit(0);
}
}
}
第七步:注册逻辑
- 在Register.cs中初始化Config文件,使我们能够轻松地访问数据库。
Config db = new Config();
public Register()
{
InitializeComponent();
// pass the database you want to connect to
db.Connect("userdata");
}
在点击退出按钮时,添加下面的代码。
private void button3_Click(object sender, EventArgs e)
{
// closses the register window
this.Close();
}
在点击注册按钮时,添加下面的代码来保存信息。
private void button2_Click(object sender, EventArgs e)
{
// saves data in the database
db.Execute("INSERT INTO `user_info` (`id`, `names`, `username`, `password`) VALUES (NULL, '"+textBox3.Text+"', '"+textBox1.Text+"', '"+textBox2.Text+"');");
this.Close()
}
总结
从上面的例子中,我们已经看到我们如何使用C#来创建一个具有登录功能的桌面系统。面向对象的功能有助于代码的重复使用,而不需要从头开始做很多编码。
在这篇文章中。
- 我们为我们的应用程序创建了一个数据库。
- 创建了登录和注册接口。
- 将我们的应用程序与数据库连接起来。
- 编码了逻辑和功能。