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

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.

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.

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.

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.

Bài viết này được đăng tại [free tuts .net]

  • 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:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Facade 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ụ

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#

Top