CƠ BẢN
SỰ KIỆN
NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

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.

Để 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.

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.

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ọ.

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:

Cách dùng Stack (ngắn xếp) trong C#

Cách dùng Stack (ngắn xếp) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính và phương thức của Stack…

Cách dùng Queue (hàng đợi) trong C#

Cách dùng Queue (hàng đợi) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính, phương thức của Queue, cũng…

Cách dùng Hashtable (bảng băm) trong C#

Cách dùng Hashtable (bảng băm) trong C#

Cụ thể sẽ tìm hiểu Hashtable là gì? các đặc điểm của nó, cùng với…

Sự kiện Enter và Leave trong C# Winforms

Sự kiện Enter và Leave trong C# Winforms

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

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Một câu hỏi được đặt ra là làm cách nào để có thể phát hiện…

Sắp xếp trộn trong C# (Merge Sort)

Sắp xếp trộn trong C# (Merge Sort)

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

Sắp xếp nổi bọt trong C# (Bubble Sort)

Sắp xếp nổi bọt trong C# (Bubble Sort)

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

Cách in ra hình tam giác ký tự * trong C#

Cách in ra hình tam giác ký tự * trong C#

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

Cách tính tổng các số chẵn từ 1 đến N trong C#

Cách tính tổng các số chẵn từ 1 đến N trong C#

Trước khi đi vào viết chương trình, chúng ta cùng tìm hiểu qua số chẵn…

Cách tính tổng các số lẻ từ 1 đến N trong C#

Cách tính tổng các số lẻ từ 1 đến N trong C#

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

Cách đếm số chữ số của một số nguyên trong C#

Cách đếm số chữ số của một số nguyên trong C#

Chúng ta cùng xem qua một số ví dụ để hiểu rõ hơn về chương…

Cách tính chu vi và diện tích hình tam giác trong C#

Cách tính chu vi và diện tích hình tam giác trong C#

Tam giác là một loại hình cơ bản trong hình học, có ba đỉnh là…

Cách tính chu vi và diện tích hình tròn trong C#

Cách tính chu vi và diện tích hình tròn trong C#

Trước khi đi vào viết chương trình tính chu vi và diện ..

Cách tính chu vi và diện tích hình chữ nhật trong C#

Cách tính chu vi và diện tích hình chữ nhật trong C#

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

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Cách xóa phần tử trùng lặp khỏi mảng trong C#

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

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Cách tìm tất cả các chuỗi con của chuỗi đã cho 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 xóa các ký tự trùng lặp khỏi chuỗi trong C#

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách xóa các ký tự…

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

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

Cách chuyển đổi nhị phân sang thập phân trong C#

Cách chuyển đổi nhị phân sang thập phân trong C#

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

Cách chuyển đổi thập phân sang nhị phân trong C#

Cách chuyển đổi thập phân sang nhị phân trong C#

Số nhị phân là các con số có cơ số là 2. Các số nhị…

Top