Tạo form đăng nhập với SQL Server trong C# Winforms

Trong bài viết này mình sẽ hướng dẫn những bạn tạo Form đăng nhập với CSDL SQL Server trong C # Winforms. Đây là một bước rất quan trọng trong những ứng dụng, vì sự bảo mật thông tin và bảo đảm an toàn của ứng dụng .

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

Để hiểu được bài này những bạn cần nắm vững kỹ năng và kiến thức trong Winforms và SQL Server, còn giờ đây hãy cùng mình thực hành thực tế thôi nào .

1. Tạo form đăng nhập trong C# Winforms

Việc tiên phong tất cả chúng ta sẽ tạo giao diện form đăng nhập với những control như hình dưới đây .

bai2 01 png

Hai TextBox ” Tài khoản ” và ” Mật khẩu ” được dùng để người dùng nhập vào thông tin tài khoản và mật khẩu của họ .Bài viết này được đăng tại [ không lấy phí tuts. net ]
RadioButton ” Hiển thị mật khẩu ” được dùng để hiển thị mật khẩu nếu người dùng chọn .
Button ” Đăng nhập ” sẽ kiểm tra xem thông tin được nhập bởi người dùng có trùng khớp với tài liệu trong database hay không. Nếu có thì cho đăng nhập vào đồng thời cho biết đăng nhập với quyền admin hay user .
Button ” Thoát “, khi người dùng chọn button này thì hộp thoại thông tin hiện ra và hỏi người dùng có muốn thoát hay không. Nếu chọn OK thì thoát khỏi chương trình, nếu chọn Cancel thì hủy bỏ lệnh thoát .

2. Tạo database và kết nối từ C# Winforms

Sau khi tạo được giao diện form đăng nhập, giờ đây ta thực thi tạo database với những tài liệu thiết yếu để kết nối từ C # winforms. Các bạn hoàn toàn có thể xem cách tạo database trong SQL, ở đây mình có một đoạn code tạo database sẵn .

Create database [QLNhanVien]
GO
USE [QLNhanVien]
GO
/****** Object:  Table [dbo].[NhanVien]    Script Date: 8/13/2021 5:44:21 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[NhanVien](
	[MaNV] [int] IDENTITY(1,1) NOT NULL,
	[TaiKhoan] [nvarchar](50) NOT NULL,
	[MatKhau] [nvarchar](50) NOT NULL,
	[IDPer] [int] NOT NULL,
 CONSTRAINT [PK_NhanVien] PRIMARY KEY CLUSTERED 
(
	[MaNV] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

Sau khi tạo database QLNhanVien những bạn hãy thêm một vài tài liệu, hoàn toàn có thể nhập bằng giao diện hoặc lệnh T-SQL nhé .

bai2 022 png

Như vậy là tất cả chúng ta đã có database, giờ đây sẽ kết nối tới database trong SQL Server từ C # winforms. Ở đây mình sử dụng file App. config để kết nối tới SQL Server, đây là một cách thông dụng và bảo đảm an toàn .

App.config



	
		
	

Code kết nối tới SQL Server

SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

Bây giờ chỉ cần những bạn sử dụng phương pháp Open ( ) để mở chuỗi kết nối tới SQL Server và thao tác với database .

3. Xử lý các sự kiện trên form đăng nhập

Khi giao diện form đăng nhập và database đã được chuẩn bị cũng như kết nối tới SQL Server thành công. Bây giờ ta bắt đầu xử lý sự kiện cho từng control trong giao diện vừa tạo.

Xử lý sự kiện cho TextBox “Mật khẩu”.

Vì tính bảo mật thông tin thì thường thì mật khẩu khi được nhập bởi người dùng sẽ bị ẩn đi. Để làm được điều này những bạn hoàn toàn có thể tùy chỉnh nó bằng giao diện trong phần Properties của TextBox ” Mật khẩu ” .

bai2 03 png

Hoặc hoàn toàn có thể tùy chỉnh bằng câu lệnh .

txtPass.PasswordChar = '*';

Xử lý sự kiện cho RadioButton “Hiển thị mật khẩu”.

Để bảo vệ rằng người dùng nhập mật khẩu đúng, tất cả chúng ta sẽ tạo một Radio Button ” Hiển thị mật khẩu “. Cho phép người dùng khi chọn vào sẽ hiển thị mật khẩu và sẽ ẩn đi nếu không chọn vào mục này .

private void chkShow_CheckedChanged(object sender, EventArgs e)
        {
            if (chkShow.Checked)
            {
                txtPass.PasswordChar = (char)0;
            }
            else
            {
                txtPass.PasswordChar = '*';
            }
        }

Xử lý sự kiện cho Button “Đăng nhập”.

Trước khi giải quyết và xử lý sự kiện cho button này, những bạn nên biết rằng để đăng nhập thành công xuất sắc thì thông tin người dùng nhập vào phải trùng với tài liệu trong database .
Vì vậy ta sẽ tạo một Stored Procedure để kiểm tra đăng nhập. Nếu thông tin tài khoản đăng nhập là admin thì trả về 1 ngược lại nếu là user thì trả về 0. Trường hợp thông tin tài khoản đăng nhập sai hoặc không sống sót thì trả về 2 và 3 .

Stored Procedure

create proc [dbo].[SP_AuthoLogin]
@Username nvarchar(20),
@Password nvarchar(20)
as
begin
	if exists (select * from NhanVien where TaiKhoan = @Username and MatKhau = @Password and IDPer = 1)
		select 1 as code
	else if exists (select * from NhanVien where TaiKhoan = @Username and MatKhau = @Password and IDPer = 0)
		select 0 as code
	else if exists(select * from NhanVien where TaiKhoan = @Username and MatKhau != @Password) 
		select 2 as code
	else select 3 as code
end

Mình sẽ sử dụng phương pháp ExecuteScalar trong class SqlCommand để lấy tác dụng trả về từ SQL Server .

object kq = cmd.ExecuteScalar();

Các bạn hoàn toàn có thể xem cách sử dụng Stored Procedure để thao tác với SQL Server trong C # tại đây .
Ở đây mình có hai param đó là ” @ Username ” và ” @ Password ” tương ứng với thông tin mà người dùng nhập vào. Mình sẽ truyền hai tham số này vào Proc ” SP_AuthoLogin “, sau đó dùng phương pháp ExecuteScalar để lấy hiệu quả trả về .

SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_AuthoLogin";
cmd.Parameters.AddWithValue("@UserName", txtUser.Text);
cmd.Parameters.AddWithValue("@Password", txtPass.Text);
cmd.Connection = conn;

Bây giờ chỉ cần so sánh hiệu quả trả về, nếu bằng 1 ( admin ) hoặc 0 ( user ) thì đăng nhập thành công xuất sắc. Ngược lại bằng 2 hoặc 3 thì đăng nhập không thành công xuất sắc .

if (code == 0)
{
    MessageBox.Show("Chào mừng User đăng nhập", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

}
else if (code == 1)
{
    MessageBox.Show("Chào mừng Admin đăng nhập", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

}
else if (code == 2)
{
    MessageBox.Show("Tài khoản hoặc mật khẩu không đúng !!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
    txtPass.Text = "";
    txtUser.Text = "";
    txtUser.Focus();
}
else
{
    MessageBox.Show("Tài khoản không tồn tại !!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
    txtPass.Text = "";
    txtUser.Text = "";
    txtUser.Focus();
}

Xử lý sự kiện cho Button “Thoát”.

Ta sử dụng DialogResult MessageBox để hiển thị một hộp thoại thông báo cho người dùng có muốn thoát khỏi chương trình khi hay không. Nếu người dùng chọn Yes thì gọi lệnh Application.Exit() để thoát chương trình, ngược lại thì hủy bỏ lệnh.

private void btnCancel_Click(object sender, EventArgs e)
{
    DialogResult dg = MessageBox.Show("Bạn có muốn thoát ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if(dg == DialogResult.Yes)
    Application.Exit();
}

4. Code hoàn chỉnh tạo form đăng nhập với SQL Server trong C# Winforms

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;
using System.Configuration;
namespace MyProject
{
    public partial class Login : Form
    {
        public static string UserName = "";
        public Login()
        {
            InitializeComponent();
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            DialogResult dg = MessageBox.Show("Bạn có muốn thoát ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if(dg == DialogResult.Yes)
            Application.Exit();
        }

        private void chkShow_CheckedChanged(object sender, EventArgs e)
        {
            if (chkShow.Checked)
            {
                txtPass.PasswordChar = (char)0;
            }
            else
            {
                txtPass.PasswordChar = '*';
            }
        }
        private void btnLogin_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection();
            try
            {
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "SP_AuthoLogin";
                cmd.Parameters.AddWithValue("@UserName", txtUser.Text);
                cmd.Parameters.AddWithValue("@Password", txtPass.Text);
                cmd.Connection = conn;
                UserName = txtUser.Text;
                object kq = cmd.ExecuteScalar();
                int code = Convert.ToInt32(kq);
                if (code == 0)
                {
                    MessageBox.Show("Chào mừng User đăng nhập", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
                else if (code == 1)
                {
                    MessageBox.Show("Chào mừng Admin đăng nhập","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                    
                }
                else if(code == 2)
                {
                    MessageBox.Show("Tài khoản hoặc mật khẩu không đúng !!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtPass.Text = "";
                    txtUser.Text = "";
                    txtUser.Focus();
                }
                else
                {
                    MessageBox.Show("Tài khoản không tồn tại !!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtPass.Text = "";
                    txtUser.Text = "";
                    txtUser.Focus();
                }
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void txtUser_MouseClick(object sender, MouseEventArgs e)
        {
            txtUser.SelectAll();
        }

        private void txtPass_MouseClick(object sender, MouseEventArgs e)
        {
            txtPass.SelectAll();
        }

        private void Login_Load(object sender, EventArgs e)
        {

        }
    }
}

Kết quả: Khi tài khoản đăng nhập là admin hoặc user sẽ thông báo. Trong thực tế sẽ phân quyền cụ thể hơn ví dụ admin có thể thêm sửa xóa, user chỉ có thể hiển thị.

ket qua png

Như vậy là tất cả chúng ta đã tạo xong form đăng nhập với SQL Server trong C # Winforms. Đây là những bài tập rất trong thực tiễn trong những ứng dụng, vậy nên hãy rèn luyện thật nhiều để thành thạo nhé. Ngoài cách mình hướng dẫn trên còn một số ít cách khác, những bạn hãy thử làm nhé. Chúc những bạn thành công xuất sắc ! ! !