Làm việc với CSDL SQLite trong môi trường .NET, qua ngôn ngữ C#.

Lượt xem: Gửi lên Facebook Unknown Thứ Tư, 10 tháng 10, 2012

I. Giới thiệu
  SQLite là một hệ quản trị cơ sở dữ liệu (CSDL) không lệ thuộc máy chủ. CSDL SQLite được chứa trong một tập tin mà thôi.
Với tính chất gọn nhẹ này, SQLite rất phù hợp với các chương trình vừa hoặc nhỏ. Khi phân phối sản phẩm, nhà phát triển không cần phải cài đặt hệ quản trị CSDL lên máy người sử dụng, mà chỉ việc mang tập tin CSDL theo cùng chương trình.

II. Cài đặt
  Để sử dụng SQLite trong môi trường Microsoft .NET, bạn chỉ cần tải thư viện System.Data.SQLite về và dẫn tham chiếu vào chương trình.
Các bước như sau:
a. Truy cập theo đường dẫn sau đây để tải về bộ thư viện mới nhất:


b. Chọn phiên bản mới nhất.
c. Tải gói binaries về.
d. Giải nén để có hai thư mục bin và Doc.
Thư viện System.Data.SQLite có các bản dịch cho từng nền tảng như 32-bit, 64-bit, Itanium. Bản 32-bit được đặt ở thư mục bin, các bản khác nằm trong các thư mục con của bin.
f. Trong project của chương trình, bạn đưa tham chiếu đến thư viện thích hợp cho máy. Khi phân phối, tùy theo máy người dùng chạy ở nền nào mà họ sẽ tải về phiên bản thích hợp. Bạn nên cung cấp các phiên bản phổ biến như 32-bit và 64-bit. Đơn giản chỉ là thay đổi tập tin System.Data.SQLite.dll cho phù hợp.

III. Tạo một lớp xử lý SQLite
Để dễ dàng làm việc với CSDL SQLite, chúng ta sẽ tạo một lớp gọi là SQLiteDataLayer đảm trách giao tiếp với CSDL.
Trước hết cần nhập các không gian tên thường dùng:


using System.Data;
using System.Data.SQLite;

1. Các trường
Lưu ý: chúng ta cài đặt giao diện IDisposable vào lớp này để nó trả bộ nhớ khi không còn được sử dụng.

class SQLiteDataLayer : System.IDisposable
{
        // biến lưu giữ kết nối
        protected SQLiteConnection cnn;
        // biến trạng thái kết nối
        protected bool connected;
        // biến thông điệp lỗi gần nhất
        protected string lastError;

        // Thuộc tính cho biết trạng thái kết nối
        public bool Connected
        {
                get { return this.connected; }
        }

        // Thuộc tính cho biết thông điệp lỗi gần nhất
        public string LastError
        {
                get { return this.lastError; }
        }
}
2. Các phương thức căn bản
a. Khởi tạo
Phương thức khởi tạo không làm gì nhiều và không nhận tham số nào.

public SQLiteDataLayer()
{
        this.cnn = null;
        this.connected = false;
        this.lastError = string.Empty;
}

b. Kết nối
Ta thiết kế một phương thức kết nối nhận hai tham số là tên tập tin CSDL và mật mã truy cập. Cần lưu ý rằng nếu tham số mật mã bằng null thì có nghĩa mật mã không được cung cấp.
Sau khi kết nối thì ta cũng mở sẵn CSDL luôn.

public bool Connect(string database, string password)
{
        // Nếu đã kết nối rồi thì sẽ gây lỗi
        if (this.connected)
        {
                this.lastError = "Connection already established.";
                return false;
        }

        // Khởi tạo kết nối
        this.cnn = new SQLiteConnection(string.Concat("Data Source=", database));
        
        // Nếu có cho mật mã thì ấn định luôn
        if (password != null)
                this.cnn.SetPassword(password);

        try
        {
                // Mở CSDL
                this.cnn.Open();
        }
        catch (SQLiteException ex)
        {
                // thường có 2 trường hợp lỗi ở đây:
                // 1. Tập tin CSDL không truy cập được.
                // 2. Mật mã không đúng.
                this.lastError = ex.Message;
                return false;
        }

        // Đã kết nối
        this.connected = true;

        // Không có lỗi
        this.lastError = string.Empty;

        return true;
}
c. Đóng kết nối
Khi dùng xong, cần đóng kết nối với phương thức sau:

public bool Disconnect()
{
        // Nếu chưa kết nối thì cũng xem là lỗi
        if (this.connected == false)
        {
                this.lastError = "Connection not established.";
                return false;
        }

        // Đóng CSDL
        this.cnn.Close();
        // Trả bộ nhớ
        this.cnn.Dispose();
        this.cnn = null;

        this.connected = false;

        this.lastError = string.Empty;
        return true;
}

d. Hủy đối tượng
Sau đây là phương thức của giao diện IDisposable đã nói ở trên:

public void Dispose()
{
        this.Disconnect();
}

3. Các thao tác trên CSDL
a. Quy ước
Ở đây đặt ra giả định là chúng ta có CSDL với một bảng tên là tblHocSinh với lệnh tạo như sau:

CREATE TABLE tblHocSinh
(
        id INTEGER,
        ten TEXT,
        diemToan REAL,
        diemVan REAL
);

Từ giờ chúng ta sẽ làm việc với bảng này và các chức năng trong lớp SQLiteDataLayer sẽ được thiết kế cho công việc đó.
b. Nạp dữ liệu vào DataGridView
Vẫn là câu lệnh SQL SELECT quen thuộc mà thôi.

public bool FillDGV(System.Windows.Forms.DataGridView dgv)
{
        // Kiểm tra trạng thái
        if (this.connected == false)
        {
                this.lastError = "Connection not established.";
                return false;
        }

        // Tạo bộ đọc dữ liệu
        SQLiteDataAdapter da = new SQLiteDataAdapter(
                "SELECT * FROM tblHocSinh;",
                this.cnn);

        // Nạp dữ liệu
        DataTable dt = new DataTable();
        da.Fill(dt);

        // Đưa vào DataGridView
        dgv.DataSource = dt;

        // Trả bộ nhớ
        da.Dispose();
        dt.Dispose();

        this.lastError = string.Empty;
        return true;
}

c. Thêm bản ghi

public bool Add(int id, string ten, double diemToan, double diemVan)
{
        // Kiểm tra trạng thái
        if (this.connected == false)
        {
                this.lastError = "Connection not established.";
                return false;
        }

        // Tạo lệnh SQL
        SQLiteCommand cmd = new SQLiteCommand(
                "INSERT INTO tblHocSinh VALUES (@id, @ten, @diemToan, @diemVan);",
                this.cnn);

        // Ấn định tham số
        cmd.Parameters.Add(new SQLiteParameter("@id", id));
        cmd.Parameters.Add(new SQLiteParameter("@ten", ten));
        cmd.Parameters.Add(new SQLiteParameter("@diemToan", diemToan));
        cmd.Parameters.Add(new SQLiteParameter("@diemVan", diemVan));

        // Thi hành
        cmd.ExecuteNonQuery();

        this.lastError = string.Empty;
        return true;
}

d. Sửa bản ghi
Ở đây tôi cho phương thức Update nhận tất cả các cột. Tùy theo yêu cầu thực tế mà việc này có thể khác đi.

public bool Update(int id, string ten, double diemToan, double diemVan)
{
        // Kiểm tra trạng thái
        if (this.connected == false)
        {
                this.lastError = "Connection not established.";
                return false;
        }

        // Tạo lệnh SQL
        SQLiteCommand cmd = new SQLiteCommand(
                "UPDATE tblHocSinh SET ten=@ten, diemToan=@diemToan, diemVan=@diemVan WHERE id=@id;",
                this.cnn);

        // Ấn định tham số
        cmd.Parameters.Add(new SQLiteParameter("@id", id));
        cmd.Parameters.Add(new SQLiteParameter("@ten", ten));
        cmd.Parameters.Add(new SQLiteParameter("@diemToan", diemToan));
        cmd.Parameters.Add(new SQLiteParameter("@diemVan", diemVan));

        // Thi hành
        cmd.ExecuteNonQuery();

        this.lastError = string.Empty;
        return true;
}

e. Xóa bản ghi
Trong phương thức này tôi dùng cột ten để làm điều kiện. Nếu cần thì bạn hãy thay bằng điều kiện khác tùy ý.

public bool Delete(string ten)
{
        // Kiểm tra trạng thái
        if (this.connected == false)
        {
                this.lastError = "Connection not established.";
                return false;
        }

        // Tạo lệnh SQL
        SQLiteCommand cmd = new SQLiteCommand(
                "DELETE FROM tblHocSinh WHERE ten=@ten;",
                this.cnn);

        // Ấn định tham số
        cmd.Parameters.Add(new SQLiteParameter("@ten", ten));

        // Thi hành
        cmd.ExecuteNonQuery();

        this.lastError = string.Empty;
        return true;
}

f. Kiểm tra xem bản ghi có tồn tại hay không
Ở đây phương thức Exists ngầm định là đang có kết nối với CSDL. Do đó người dùng có thể cần kiểm tra trước bằng thuộc tính Connected.

public bool Exists(string ten)
{
        SQLiteCommand cmd = new SQLiteCommand(
                "SELECT ten FROM tblHocSinh WHERE ten=@ten;",
                this.cnn);

        cmd.Parameters.Add(new SQLiteParameter("@ten", ten));

        // Nếu select được một cái gì đó != null thì
        // xem như bản ghi hiện hữu
        return (cmd.ExecuteScalar() != null);
}

IV. Bảo mật
CSDL SQLite nguyên thủy không có cơ chế bảo mật bằng mật mã. Nhưng thư viện System.Data.SQLite đã cung cấp thêm chức năng này.
Việc thiết lập mật mã cho CSDL được thực hiện với phương thức sau (trong lớp SQLiteDataLayer):

public bool ChangePassword(string newPassword)
{
        if (this.connected == false)
        {
                this.lastError = "Connection not established.";
                return false;
        }

        this.cnn.ChangePassword(newPassword);

        this.lastError = string.Empty;
        return true;
}

Lưu ý rằng việc đổi mật mã chỉ có thể thực hiện được khi CSDL đang mở, thông qua phương thức Open của SQLiteConnection.

V. Tham khảo
Trang mạng của SQLite: http://www.sqlite.org 
AngelsIT

Bài viết liên quan

1 nhận xét:

Dịch vụ thiết kế

Tư vấn thiết kế

Nhận xét của khách hàng

Cảm nhận khách hàng

  • Dịch vụ của các bạn khá tốt nhưng vẫn còn những diểm cần bổ xung Dương Phương LÂm
  • Website của các bạn rất chuyên nghiệp. Website DSCViet đã mang lại cho tôi nhiều điều bổ ích. Chúc các bạn ngày càng lớn mạnh và phát triển.^^. Nguyễn Anh Hiếu
  • Website của các bạn rất chuyên nghiệp. Website DSCViet đã mang lại cho tôi nhiều điều bổ ích. Chúc các bạn ngày càng lớn mạnh và phát triển.^^. Nguyễn Anh Hiếu
  • Phần mềm của các bạn thiết kế chúng tôi thấy rất ưng ý, cảm ơn các bạn chúc các bạn thành công hơn nữa Lê Thị Hương

online

Danh mục

Quảng cáo left

Tại sao nên chọn chúng tôi?
Liên hệ
Nhóm phát triển phần mềm việt
Địa chỉ: Nhóm phát triển phần mềm việt - ĐHSPKT Hưng Yên - Lớp TK7SE
Điên thoại: 01.649.635.813
Hotline: 016.496.358.13
E-mail : duysinhit@gmail.com
SDCViet © 2012. Dessgin: Phạm Duy Sinh Blogger

like