CƠ BẢN
SỰ KIỆN
NÂNG CAO
FIREBASE
WINDOWS FORM
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT
Thông báo trang web đã đổi chủ: Chúng tôi sẽ sàn lọc nội dung, loại bỏ các bài viết vi phạm.

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 các 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 các ứng dụng, vì sự bảo mật và 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 các bạn cần nắm vững kiến thức trong Winforms SQL Server, còn bây giờ hãy cùng mình thực hành thôi nào.

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

Việc đầu tiên chúng ta sẽ tạo giao diện form đăng nhập với các 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 tài khoản và mật khẩu của họ.

Bài viết này được đăng tại [free 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 dữ 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 báo 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, bây giờ ta thực hiện tạo database với các dữ liệu cần thiết để kết nối từ C# winforms. Các bạ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 các bạn hãy thêm một vài dữ liệu, có thể nhập bằng giao diện hoặc lệnh T-SQL nhé.

bai2 022 png

Như vậy là chúng ta đã có database, bây giờ 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à an toàn.

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<connectionStrings>
		<add name="connStr" connectionString="Server=DESKTOP-PQMLT59\VANQUYEN;Database=QLNhanVien;Integrated Security=True" />
	</connectionStrings>
</configuration>

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 các bạn sử dụng phương thức 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ì thông thường 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 các bạ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 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".

Để đảm bảo rằng người dùng nhập mật khẩu đúng, 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 xử lý sự kiện cho button này, các bạn nên biết rằng để đăng nhập thành công thì thông tin người dùng nhập vào phải trùng với dữ liệu trong database.

Vì vậy ta sẽ tạo một Stored Procedure để kiểm tra đăng nhập. Nếu 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 tài khoản đăng nhập sai hoặc không tồn tại 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 thức ExecuteScalar trong class SqlCommand để lấy kết quả trả về từ SQL Server.

object kq = cmd.ExecuteScalar();

Các bạ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 thức ExecuteScalar để lấy kết 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 kết quả trả về, nếu bằng 1 (admin) hoặc 0 (user) thì đăng nhập thành công. Ngược lại bằng 2 hoặc 3 thì đăng nhập không thành công.

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à chúng ta đã tạo xong form đăng nhập với SQL Server trong C# Winforms. Đây là các bài tập rất thực tế trong các ứng dụng, vậy nên hãy luyện tập 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ố cách khác, các bạn hãy thử làm nhé. Chúc các bạn thành công !!!

Cùng chuyên mục:

Adapter Design Pattern trong C# - Cách triển khai và ví dụ

Adapter Design Pattern trong C# - Cách triển khai và ví dụ

Singleton Design Pattern trong C# - Cách triển khai và ví dụ

Singleton Design Pattern trong C# - Cách triển khai và ví dụ

Prototype Design Pattern trong C# - Cách triển khai và ví dụ

Prototype Design Pattern trong C# - Cách triển khai và ví dụ

Builder Design Pattern trong C# - Cách triển khai và ví dụ

Builder Design Pattern trong C# - Cách triển khai và ví dụ

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Trong bài viết này Freetuts chia sẽ cho các bạn một ứng dụng khá thú…

Factory Design Pattern trong C# - Cách triển khai và ví dụ

Factory Design Pattern trong C# - Cách triển khai và ví dụ

Chúng ta sẽ tìm hiểu về Factory Design Pattern trong C# là gì? Cách triển…

Hướng dẫn giải phương trình bậc hai trong C#

Hướng dẫn giải phương trình bậc hai trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Cách nối hai mảng trong C# bằng hai cách khác nhau

Cách nối hai mảng trong C# bằng hai cách khác nhau

Hướng dẫn chuyển đổi giờ phút giây trong C#

Hướng dẫn chuyển đổi giờ phút giây trong C#

Cách tìm số lớn nhất trong mảng C# cực dễ

Cách tìm số lớn nhất trong mảng C# cực dễ

Trong bài viết này mình sẽ hướng dẫn các bạn cách ..

Cách kiểm tra sự tồn tại của giá trị x trong mảng C#

Cách kiểm tra sự tồn tại của giá trị x trong mảng C#

Mình sẽ thực hiện một chương trình kiểm tra giá x có tồn ...

Cách tìm số nhỏ nhất và lớn nhất trong C#

Cách tìm số nhỏ nhất và lớn nhất trong C#

Mình sẽ thực hiện hai chương trình để tìm số nhỏ nhất và số lớn…

Cách tạo các số ngẫu nhiên (Random) trong C#

Cách tạo các số ngẫu nhiên (Random) trong C#

Cách tính căn bậc hai trong C# cực dễ

Cách tính căn bậc hai trong C# cực dễ

Trong bài viết này mình sẽ hướng dẫn các bạn cách tính căn bậc hai…

Cách làm tròn số trong C# bằng hàm Math.Round

Cách làm tròn số trong C# bằng hàm Math.Round

Mình sẽ thực hiện làm tròn số theo nhiều cách khác nhau để các bạn…

Cách tìm ước số của một số nguyên trong C#

Cách tìm ước số của một số nguyên trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tìm ...

Cách tìm bội chung nhỏ nhất trong C#

Cách tìm bội chung nhỏ nhất trong C#

Cách kiểm tra số chính phương trong C#

Cách kiểm tra số chính phương trong C#

Trước đi vào viết chương trình, các bạn cùng ...

Cách kiểm tra số hoàn hảo trong C#

Cách kiểm tra số hoàn hảo trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách kiểm ...

Top