如何用C# Winforms创建登录和注册系统

255 阅读6分钟

用C# Winforms创建登录和注册系统

近年来,许多开发者都在使用C#来开发他们的应用程序。在本教程中,我们将通过一个简单的例子来说明如何用C#创建一个基本的用户认证。

简介

C#或C-sharp是一种由微软开发的面向对象的编程语言。C#或C-sharp运行在一个称为.Net框架的框架上。

该语言创造了许多应用程序,如。

  • 网络应用程序
  • 移动应用程序
  • 计算机游戏
  • 桌面应用程序
  • 数据库应用
  • 虚拟现实应用

先决条件

要跟上这篇文章,最好能有以下条件。

  • 一个编辑器,在我的案例中,我将使用[Visual Studio]。
  • 一些基本的C#和SQL知识。
  • 关于如何运行关系型数据库管理的知识,在这种情况下,我们将使用[MySQL]。
  • Visual Studio知识以及如何创建项目。

第一步:创建一个数据库和带有所需列的表


   Create database userdata;

DATABASE CREATION

创建表的命令。


    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`)) ;

TABLE CREATION

第二步:创建一个项目

通过点击File -> New -> Project ,然后选择Visual C#,创建一个Visual Studio项目。在窗口中,选择Windows Forms App(.Net Framework)。给你的应用程序起个名字。然后点击确定。该项目将带有默认的表单,名为Form 1。

第三步:创建一个配置类来执行MySQL查询

由于C#是面向对象的,我们将创建一个类来处理我们将在程序中使用的查询的执行。

从解决方案资源管理器窗口中右击并选择添加->新项目->类。将该类命名为Config.cs,然后点击添加按钮。

  • 通过右键单击解决方案资源管理器窗口添加MySQL.Data库,然后管理Nuget包,然后搜索MySQL.Data库并安装。

MYSQL LIBRARY

  • 添加以下类来帮助执行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。

标签将显示这两个文本框的功能。

LOGIN INTERFACE

注册表格

  • 在解决方案资源管理器中点击Register.cs,在显示的表单中添加两个按钮、三个文本框和三个标签。

第一个按钮将是一个注册按钮,用于保存输入的数据,第二个按钮将是一个退出按钮,用于关闭注册表单。

第一个文本框将允许输入用户的名字。第二个文本框将允许输入用户的用户名。第三个文本框是用来输入密码的。

标签将或显示这三个文本框的功能。

REGISTER INTERFACE

第六步:登录逻辑

  • 在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#来创建一个具有登录功能的桌面系统。面向对象的功能有助于代码的重复使用,而不需要从头开始做很多编码。

在这篇文章中。

  • 我们为我们的应用程序创建了一个数据库。
  • 创建了登录和注册接口。
  • 将我们的应用程序与数据库连接起来。
  • 编码了逻辑和功能。