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 ý ạ.

Cách kết nối SQL Server trong C# Winforms

Trong bài viết này mình sẽ hướng dẫn các bạn cách kết nối SQL Server trong C# Winforms. Đây là bước đầu tiên và quan trọng nhất khi các muốn làm việc được với SQL Server.

Mỗi loại cơ sở dữ liệu sẽ sử dụng một namespace tương ứng, trong trường hợp làm việc với CSDL SQL Server thì namespace là System.Data.SqlClient. Để kết nối tới SQL Server ta sử dụng đối tượng SqlConnection trong C#, đây là một class có trong namespace System.Data.SqlClient.

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. Kết nối CSDL với quyền chứng thực của Windows trong C#

Khi kết nối với CSDL SQL Server với quyền chứng thực của Windows thì chuỗi kết nối sẽ không tồn tại hai thuộc tính User Id và Password. Thay vào đó, chuỗi kết nối sẽ có thuộc tính Integrated Security = SSPI hoặc Integrated Security = True.

string _connectionString = "server=.; database=hoadon;integrated security=true";
//hoặc
string _connectionString = "server=.;database=hoadon;integrated security = SSPI";

Ngoài ra thuộc tính database còn có thể thay thế bằng Initial Catalog. Sau đây là một số thuộc tính của chuỗi kết nối connectionString.

  • Data Source or Server: Tên máy chủ hay địa chỉ IP máy chủ nơi CSDL hoạt động.
  • Database or Initial Catalog: Tên của CSDL chúng ta muốn sử dụng.
  • Connection Timeout: Quy định thời gian chờ của ADO.NET cho kết nối thành công. Nếu quá thời gian này mà vẫn chưa kết nối được chúng ta sẽ nhận được thông báo lỗi ngoại lệ Connection Timeout.
  • Integrated Security=True or Integrated Security=SSPI: Nếu chúng ta muốn cơ chế đăng nhập SQL Server sử dụng quyền chứng thực của hệ điều hành Windows.

2. Kết nối CSDL với quyền chứng thực của SQL Server trong C#

Trong trường hợp chúng ta muốn kết nối với SQL Server bằng quyền chứng thực của SQL Server thì chỉ cần thay Integrated Security=True bằng hai thông số User IdPWD.

  • User Id: Tài khoản được tạo bởi SQL Server (giả sử là sa, đây là tài khoản cao nhất trong SQL Server)
  • PWD: Mật khẩu của tài khoản muốn kết nối (giả sử là bimat).

Ví dụ:

ConnetionString = "Server=.; Database=Student;Connection Timeout-60; User Id=sa;Password=pass";
//hoặc
ConnectionString = "Server=.;Database=Student;Connection Timeout=60;User Id=sa; PWD=pass";

*Lưu ý: Chuỗi kết nối (Connection) cần phải được mở trước khi thực hiện các thao tác với CSDL. Sau khi kết thúc thao tác với CSDL, thì cần phải đóng chuỗi chết nối để giải phóng tài nguyên cho hệ thống.

3. Tập tin lưu trữ chuỗi kết nối

Để cho phép người dùng có thể cấu hình giá trị cho các thuộc tính trong chuỗi kết nối cơ sở dữ liệu, chúng ta có thể sử dụng các loại định dạng file như: *.ini, *.txt. Tuy nhiên, khi làm việc với .NET, chúng ta có thể sử dụng file App.config với cấu trúc nội dung được tổ chức theo dạng XML.

*Lưu ý: App.config là file có định dạng XML được giới thiệu từ phiên bản .NET 1.0. Nó cho phép chúng ta khai báo các tham số cùng với giá trị và các chỉ thị khác.

Ví dụ: Khi chúng ta kết nối SQL Server với file App.config.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <connectionStrings>
 <add name="SqlServer" connectionString="Server=(local);database=hoadon;uid=sa;pwd=hihipass" providerName="System.Data.SqlClient"></add>
 </connectionStrings>
</configuration>

Hoặc theo dạng như sau:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <appSettings>
   <add key ="server" value="(local)"/>
   <add key="instance" value=""/>
   <add key="database" value="hoadon"/>
   <add key="port" value=""/>
   <add key="timeout" value=""/>
 </appSettings>
</configuration>

4. Mở và đóng chuỗi kết nối trong C#

Sau khi khai báo và khởi tạo đối tượng SqlConnection theo các cách ở trên, chúng ta sẽ thực hiện mở kết nối với CSDL bằng cách gọi phương thức Open().

SqlConnection.Open();

Chú ý: để kiểm tra tính hợp lệ của người dùng khi đăng nhập CSDL, chúng ta cần khai báo để mở CSDL với chuỗi kết nối theo hai quyền truy cập của Windows và SQL Server.

Sau khi mở kết nối và thao tác với CSDL xong thì tiến hành đóng kết nối bằng phương thức Close().

SqlConnection.Close();

Các bạn chú ý chỉ mở chuỗi kết nối khi cần thiết và đóng ngay nếu không sử dụng đến CSDL hoặc ngay sau khi hoàn tất thao tác với CSDL.

5. Ví dụ kết nối SQL Server trong C#

Trong ví dụ này mình sẽ thực hiện tạo một Form giao diện với hai quyền truy cập Windows và SQL Server. Sau đó xử lý một số sự kiện và chức năng của các điều khiển trên Form. Ở các bài trước mình đã hướng dẫn về các điều khiển trong Winforms, các bạn có thể xem lại nhé.

bai1 06 png

Việc đầu tiên chúng ta cần tạo Form giao diện như trên, sau đó đặt tên cho từng điều khiển để dễ gọi trong khi viết code. Phần này mình đã hướng dẫn rất kỹ ở các bài trước, vậy nên mình sẽ không hướng dẫn cụ thể nữa. Các bạn có thể xem lại tại đây.

Tạo User ID và Password trong SQL Server

Tiếp đến ta sẽ tạo User Id và Password cho quyền đăng nhập bằng SQL Server, cụ thể như sau:

Bước 1: Đăng nhập vào SQL Server.

Bước 2: Click chuột phải vào Logins và chọn New Login.

bai1 01 png

Sau khi chọn New Login, thì một cửa sổ mới hiện ra. Điền đầy đủ thông tin cần thiết khi tạo User.

bai1 02 png

Bước 3: Chọn database mà User được truy cập đến, bằng cách Click chuột phải vào User vừa mới được tạo và chọn Properties.

bai1 03 png

Một cửa sổ mới hiện ra, khi đó ta chọn Database mà User này sẽ truy cập trong mục User Mapping.

bai1 04 png

Bước 4: Cấp quyền User.

Ở đây mình chỉ sử dùng quyền Connect để demo mà thôi. Các bạn có thể cho phép các quyền khác nữa, tùy vào chức vụ của User. Các bạn sẽ Click chuột phải vào Tên Database muốn cho phép kết nối và thao tác, sau đó chọn vào properties.

bai1 05 png

Tiếp đến sẽ chọn các quyền cho User này, ở đây mình chọn quyền truy cập Connect trong mục Permissions.

bai1 09 png

Như vậy là chúng ta đã tạo xong User Id và Password trong SQL Server, bây giờ có thể sử dụng tài khoản đó để đăng nhập từ C# rồi đấy.

Bây giờ sẽ xử lý sự kiện cho các điều khiển, cụ thể là Button "Connect" và các RadioButton khi click vào để chọn chế độ truy cập.

Xử lý sự kiện cho các RadioButton

Ta sẽ xử lý sự kiện khi người dùng Click vào RadioButton, cụ thể như sau:

  • Khi người dùng click vào RadioButton "Chứng thực bằng Windows", thì ta sẽ hiện hai Textbox "Server" và "Database" cho người dùng điền. Còn hai Textbox "Tài khoản" và "Mật khẩu" sẽ ẩn đi dưới chế độ ReadOnly.
  • Khi người dùng click vào RadioButton "Chứng thực bằng SQL Server" thì ta sẽ hiện cả bốn TextBox cho người dùng điền vào.
private void rdbWindows_CheckedChanged(object sender, EventArgs e)
{
     txtTaiKhoan.ReadOnly = true;
     txtMatKhau.ReadOnly = true;
     txtTenDb.ReadOnly = false;
     txtTenServer.ReadOnly = false;
}

private void rdbSQL_CheckedChanged(object sender, EventArgs e)
{
     txtTaiKhoan.ReadOnly = false;
     txtMatKhau.ReadOnly = false;
     txtTenDb.ReadOnly = false;
     txtTenServer.ReadOnly = false;
}

Xử lý sự kiện cho button "Connect"

Ta sẽ xử lý sự kiện cho button "Connect". Nếu người dùng chọn quyền truy cập bằng Windows thì ta tạo chuỗi kết nối bằng quyền truy tập Windows. Ngược lại nếu người dùng chọn vào quyền truy cập SQL Server thì ta cũng sẽ tạo chuỗi kết nối bằng SQL Server với tài khoản và mật khẩu.

private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                SqlConnection conn = new SqlConnection();
                string connectionstring = "";
                if (rdbWindows.Checked == true)
                {
                    connectionstring = "server=" + txtTenServer.Text;
                    connectionstring += ";database=" + txtTenDb.Text;
                    connectionstring += ";integrated security=true";
                    conn.ConnectionString = connectionstring;
                }
                else
                {
                    connectionstring = "server=" + txtTenServer.Text;
                    connectionstring += ";database=" + txtTenDb.Text;
                    connectionstring += ";uid=" + txtTaiKhoan.Text;
                    connectionstring += ";pwd=" + txtMatKhau.Text;
                    conn.ConnectionString = connectionstring;
                }
                conn.Open();
                MessageBox.Show("ket noi thanh cong");
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

Kết quả: khi người dùng nhập đúng các thông tin và chọn vào button "Connect".

bai1 10 pngbai1 11 png

Code hoàn chỉnh kết nối SQL Server trong C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Connection_to_Database
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            rdbWindows.Checked = true;
            txtMatKhau.ReadOnly = true;
            txtTaiKhoan.ReadOnly = true;
        }

        private void rdbWindows_CheckedChanged(object sender, EventArgs e)
        {
            txtTaiKhoan.ReadOnly = true;
            txtMatKhau.ReadOnly = true;
            txtTenDb.ReadOnly = false;
            txtTenServer.ReadOnly = false;
        }

        private void rdbSQL_CheckedChanged(object sender, EventArgs e)
        {
            txtTaiKhoan.ReadOnly = false;
            txtMatKhau.ReadOnly = false;
            txtTenDb.ReadOnly = false;
            txtTenServer.ReadOnly = false;
        }

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

        private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                SqlConnection conn = new SqlConnection();
                string connectionstring = "";
                if (rdbWindows.Checked == true)
                {
                    connectionstring = "server=" + txtTenServer.Text;
                    connectionstring += ";database=" + txtTenDb.Text;
                    connectionstring += ";integrated security=true";
                    conn.ConnectionString = connectionstring;
                }
                else
                {
                    connectionstring = "server=" + txtTenServer.Text;
                    connectionstring += ";database=" + txtTenDb.Text;
                    connectionstring += ";uid=" + txtTaiKhoan.Text;
                    connectionstring += ";pwd=" + txtMatKhau.Text;
                    conn.ConnectionString = connectionstring;
                }
                conn.Open();
                MessageBox.Show("ket noi thanh cong");
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }
    }
}

Như vậy là chúng ta đã tìm hiểu xong cách kết nối với SQL Server trong C# Winforms. Ở bài tiếp theo mình sẽ tiếp tục giới thiệu cách tạo Form đăng nhập với các Account được lưu trữ trong SQL Server, các bạn chú ý theo dõi nhé !!!

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