Như đã nói, với ADO.NET có hai mô hình sử dụng phổ biến là kết nối và phi kết nối.
Mô hình kết nối:
  • SqlConnection: Quản lý kết nối tới Server
  • SqlCommand: Truyền các lệnh sql tới server
  • SqlDataReader: Duyệt dữ liệu trên server, chỉ duyệt từng dòng
Đây là các class cần sử dụng trong mô hình này.

Mô hình phi kết nối:
  • SqlConnection : Quản lý kết nối tới Server, có thể dùng hoặc truyền trực tiếp chuỗi kết nối vào SqlDataAdapter
  • SqlDataAdapter: Cầu nối database và Datasets và thao tác dữ liệu
  • SqlCommandBuilder: Tự động thực hiện một vài công việc SqlDataAdapter. Sử dụng nếu bạn không muốn code dài dòng, chi tiết
  • DataSet (DataTable, ...): Lớp tạo các bảng để chứa dữ liệu tạm thời tải lên từ database. Có thể chỉ sử DataTable để hứng dữ liệu 1 table từ database.
Sử dụng database
  • Tạo trực tiếp trên SQL Server
  • Tạo gián tiếp trên Visual Studio

    Phần 2: MÔ HÌNH KẾT NỐI - KHÔNG SỬ DỤNG STORED PROCEDURE TRÊN SQL SERVER

       Phần này, chúng ta sẽ tìm hiểu cách sử dụng ADO.NET trong mô hình kết nối database. Điều đó có nghĩa, ứng dụng của bạn phải luôn kết nối tới CSDL để thực hiện các thao tác (Chọn, thêm, sửa xóa ...). Và hãy nhớ chúng ta sẽ không sử dụng Datasets, DataApdater trong này, mà chỉ dùng các thành phần cơ bản như: Connection, Command, DataReader.   


     Đầu tiên, trong bài này các bạn sẽ được thực hành qua qua ví dụ demo nhỏ như hình dưới. bạn có thể tải source code để tham khảo thêm.


    Created by BravoHex

    1. Tạo database

    a.) Tạo database trên SQL Server

    Việc tạo một cơ sở dữ liệu trên Sql Server bạn có thể sử dụng công cụ Sql Server Management Studio để thực hiện điều này. Chúng ta bỏ qua phần này . . .

    b.) Tạo database trên Visual Studio

    Thứ nhất, nếu bạn muốn tạo một database kèm theo dự án (Project) của mình. Hãy tạo một folder trên dự án.  Sau đó làm như sau:


    • Chuột phải vào folder 
    • Chọn Add | New Item
    • Chọn SQL Server Database
     - Lúc này database sẽ được lưu trong dự án của bạn. Nên nhớ nó vẫn chưa được Attach trong SQL Server, database này hoạt động khi bạn mở  dự án của mình.

    - Sau khi đã có database như hình bên, bạn có thể mở Server Explorer trên Visual để biên tập dữ liệu.
    Menu | View | Server Explore
    hoặc Ctrl + Alt + S


    - Ngoài ra, bạn có thể chuột phải vào Data Connections trên Server Explorer chon Add Connect để tạo một database hoặc sử dụng database có trên Server.
    Error
    Trong trường hợp bạn không thể tạo database trên Visual Studio do không được cấp phép. Ta có thể làm như sau:
    Mở SQL Server Management Studio
    Mở New Query
    Thực thi đoạn lệnh như sau
    EXEC SP_CONFIGURE 'user instances enabled',1
    RECONFIGURE
    (Tùy chọn Enable User Instances nằm ở bước cuối cài đặt MS SQL Server. Nếu bạn bỏ qua bước này thì cần setup lại lệnh trên mới có hiệu lực)
    Trong một trường hợp khác, có thể bạn chưa bật dịch vụ của Sql Server lên. Hãy vào SQL Server Configuration Manager để bật nó.
    Nếu không Start được một dịch vụ nào đó ta lại xử lý như sau:
    • Nhấn Window + R và gõ msconfig
    • Trên tab services chọn Enabled all
    • Lại chọn Hide all MS services
    • Tiếp tục chọn Disabled
    • Khởi động lại máy và vào SQL Server Configuration Manager để thử lại

    2. Kết nối tới database 

    a.) Chuỗi kết nối

     - Làm thế nào để có một chuỗi kết nối chính xác mà không cần phải nhớ. Đơn giản hãy sử công cụ tìm kiếm phổ biến hoặc vào trang Connection String

    - Đối với database mà bạn đã tạo trên Visual như bên trên ta lấy chuỗi kết nối đơn giản như sau:
    • Mở tab Server Explorer (Menu | View | Server Explorer hoặc Ctrl + Alt + S)
    • Chọn database của bạn
    • Chuột phải lên database chọn Properties (Alt + Enter)
    • Trên tab thuộc tính copy đoạn kết nối
    • Đoạn kết nối có dạng
    Data Source=(LocalDB)\v11.0;AttachDbFilename="C:\Users\Bravo Hex\Documents\Visual Studio 2013\Projects\BaiTapDemo\BaiTap2\App_Data\QuanLyBanHang.mdf";Integrated Security=True
     Lưu ý: Đoạn kết nối trên có dấu xuyệt (back slash) '\' ta phải dùng @ đặt trước chuỗi hoặc thêm một dấu xuyệt nữa '\\'. Còn đường dẫn database AttachDbFilename="C:\Users\Bravo Hex\Documents\Visual Studio 2013\Projects\BaiTapDemo\BaiTap2\App_Data\QuanLyBanHang.mdf" cần phải sửa lại dấu nháy kép 2 đầu bằng dấu nháy đơn.

    - Lúc này đoạn kết nối của bạn sẽ có dạng:
    string S = @"Data Source=(LocalDB)\v11.0;AttachDbFilename='C:\Users\Bravo Hex\Documents\Visual Studio 2013\Projects\BaiTapDemo\BaiTap2\App_Data\QuanLyBanHang.mdf';Integrated Security=True";

    - Đối với database trên server đoạn kết nối ngắn gọn hơn như demo dưới đây. Có nhiều cách sử dụng đoạn kết nối với nhiều thiết lập khác nhau. Nhưng nếu bạn lần đầu tiếp cận thì không cần quá quan tâm về vấn đề này . . .

    b. Hàm kết nối

    - Sử dụng class SqlConnection để khởi tạo một kết nối hợp lệ tới SQL Server có chứa database của bạn. Dưới đây là đoạn kết nối tới sql server không cần yêu cầu mật khẩu login server.

            /// <summary>
    /// Hàm thực thi kết nối tới CSDL SQL Server.
    /// </summary>
    private void FuncConnec()
    {
    const string sqlDrirectory = @"server=.\sqlexpress;
    database=MyDataDemo;integrated security=true";
    //const string sqlDrirectory = @"server=localhost;
    database=MyDataDemo;integrated security=true";
    //const string sqlDrirectory = "Data source=(local); 
    Initial Catalog=MyDataDemo;Integrated Security=True";
    _con.ConnectionString = sqlDrirectory;
    _con.Open();
    }

    3. Thao tác với dữ liệu

    - Sau khi connect được với CSDL liệu ta bắt đầu thao tác với nó (Get dữ liệu, thêm, sửa, xóa ....truy vấn tìm kiếm). Dùng SqlCommand để đưa ra một lệnh truy vấn sql đến CSDL và SqlDataReader để đọc dữ liệu
    - Để đưa ra các thao tác cơ bản nhất nên chúng ta chỉ khởi tạo các hàm như: Get dữ liệu và đổ lên DataGridView, Insert dữ liệu, Update, Delete

    a. Đổ dữ liệu lên datagridview

    Dưới đây là hàm get dữ liệu và đổ chúng lên DataGridView (C#/Windows Form) mà ta đã tạo sẵn. (Trước đó trên DataGridView các bạn tạo 5 cột (Column ) tương ứng )

    /// <summary>
    /// Hàm đọc dữ liệu trên CSDL và thông qua đó lấy dữ liệu về 
    datagridview mà ta đã tạo sẵn
    /// Sử dụng lớp SqlCommand gửi lệnh sql tới server
    /// Sử dụng lớp SqlDataReader để đọc từng hàng (Row) trên CSDL.
    /// </summary>
    private void GetData()
    {

    _cmd = new SqlCommand("Select * from SinhVien", _con);
    _dr = _cmd.ExecuteReader();

    //Trong khi DataReader đọc dữ liệu, ta lấy dữ liệu về và đổ 
    (Fill) vào datagridview
    while (_dr.Read())
    {
    var masv = (string)_dr["MaSV"];
    var hoten = (string)_dr["HoTenSV"];
    var ngaysinh = _dr["NgaySinh"];
    var quequan = (string)_dr["QueQuan"];
    var makhoa = (string)_dr["MaKhoa"];
    dataGridView.Rows.Add(masv, hoten, ngaysinh.ToString(), 
    quequan, makhoa);
    }
    _dr.Close();
    _cmd.Dispose();
    }


    b. Hàm Binding dữ liêu

     - Điều này cho phép dữ liệu được chọn trên grid view sẽ được đẩy lên các textbox....

    /// <summary>
    /// Hàm binding dữ liệu từ datagridview lên các TextBox
    /// </summary>
    private void Bind()
    {
    // Fix Error.........................
    //if (dataGridView.CurrentRow == null) return;
    //var i = dataGridView.CurrentRow.Index +1;
    //txtMasv.Text = 
    Convert.ToString(dataGridView.SelectedRows[i].Cells[0].Value);
    //txtHoten.Text = 
    Convert.ToString(dataGridView.SelectedRows[i].Cells[1].Value);
    //dtpNgaysinh.Text = 
    Convert.ToString(dataGridView.SelectedRows[i].Cells[2].Value);
    //txtQuequan.Text = 
    Convert.ToString(dataGridView.SelectedRows[i].Cells[3].Value);
    //txtMakhoa.Text = 
    Convert.ToString(dataGridView.SelectedRows[i].Cells[4].Value);

    if (dataGridView.SelectedCells.Count <= 0) return;
    var selectedrowindex = dataGridView.SelectedCells[0].RowIndex;
    var selectedRow = dataGridView.Rows[selectedrowindex];
    txtMasv.Text = Convert.ToString(selectedRow.Cells["MaSV"].Value);
    txtHoten.Text = 
    Convert.ToString(selectedRow.Cells["HoTenSV"].Value);
    dtpNgaysinh.Text = 
    Convert.ToString(selectedRow.Cells["NgaySinh"].Value);
    txtQuequan.Text = 
    Convert.ToString(selectedRow.Cells["QueQuan"].Value);
    var cbbTemp = 
    Convert.ToString(selectedRow.Cells["MaKhoa"].Value);
    cbbMakhoa.SelectedValue = cbbTemp;
    }

    c. Hàm Insert dữ liệu vào database


    /// <summary>
    /// Hàm thêm mới dữ liệu vào CSDL
    /// </summary>
    private void InsertData()
    {
    var sqlDate = dtpNgaysinh.Value.ToString("yyyy-MM-dd hh:mm:ss");
    _cmd = new SqlCommand
    {
    Connection = _con,
    CommandType = CommandType.Text,
    CommandText =
    "Insert into SinhVien values('" + txtMasv.Text + "',
    '" + txtHoten.Text + "','" + sqlDate + "',
    '" + txtQuequan.Text + "',
    '" + cbbMakhoa.SelectedValue + "')"
    };

    _cmd.ExecuteNonQuery();
    _cmd.Dispose();

    }

    d. Hàm Update


    /// <summary>
    /// Hàm Cập nhật, sửa lại một dòng dữ liệu. Lưu ý khóa chính không thể được cập nhật
    /// </summary>
    private void UpdateData()
    {
    var sqlDate = dtpNgaysinh.Value.ToString("yyyy-MM-dd hh:mm:ss");
    _cmd = new SqlCommand("Select * from SinhVien", _con)
    {
    CommandText =
    "Update SinhVien set HoTenSV='" + txtHoten.Text + "', 
    NgaySinh='" + sqlDate + "',QueQuan='" +
    txtQuequan.Text + "',
    MaKhoa='" + cbbMakhoa.SelectedValue + "' where MaSV='" + txtMasv.Text + "'"
    };
    _cmd.ExecuteNonQuery();
    _cmd.Dispose();

    }

    e. Hàm Delete


    /// <summary>
    /// Tương tự, đây là hàm xóa 1 hàng dữ liệu.
    /// </summary>
    private void DeleteData()
    {
    _cmd = new SqlCommand("select * from SinhVien", _con)
    {
    CommandText = "Delete from SinhVien where MaSV='"
    txtMasv.Text + "'"
    };
    _cmd.ExecuteNonQuery();
    _cmd.Dispose();
    }

    f. Hàm lấy dữ liệu cho combobox

    Hàm get dữ liệu từ Table KHOA lên Combobox, vì chúng ta có mối quan hệ KHOA-SINHVIEN. Combobox nhập liệu cho table SinhVien cần tham chiếu tới Table KHOA.
    DiagramKhoaSinhVien


    /// <summary>
    /// Hàm này get dữ liệu từ bảng KHOA và hiển thị lên Conbobox.
    /// Tên Khoa là phần hiển thị trên combobox nhưng MaKhoa mới là giá trị chính yếu được lấy
    /// </summary>
    private void GetMaKhoaForCombobox()
    {
    var data = new Dictionary<string, string>();
    _cmd = new SqlCommand("Select * from Khoa", _con);
    _dr = _cmd.ExecuteReader();


    while (_dr.Read())
    {
    data.Add(_dr["MaKhoa"].ToString(),_dr["TenKhoa"].ToString());
    }
    cbbMakhoa.DataSource = new BindingSource(data, null);
    cbbMakhoa.DisplayMember = "Value";
    cbbMakhoa.ValueMember = "Key";
    // Get combobox selection (in handler)
    //string value = ((KeyValuePair<string, string>)comboBox1.SelectedItem).Value;
    _dr.Close();
    _cmd.Dispose();
    }

    Như vậy, các hàm chính đã được viết xong. Bạn hãy gọi chúng trên các sự kiện Click button để thực thi như demo. Nếu bạn gặp khó khăn trong vấn đề test demo hãy để lại bình luận tại đây.

    Chú ý:
    Demo được thực hiện bằng VS Studio 2013. Nếu bạn dùng phiên bản thấp hơn, chẳng hạn 2010 thì làm như sau:

    B1: Mở file *.sln bằng Notepad
    B2: Bạn sẽ thấy những dòng đầu như thế này
    Microsoft Visual Studio Solution File, Format Version 12.00
    # Visual Studio 2013
    Project("{FAE04EC0-301F-11 .........
    ...................................

    B3: Thay số 12.00 in đậm thành 11.00 và 2013 thành 2010.
    B4: Save
    Hope this helps !

    Reference:
    [1] MSDN 
    [2] Huseyin Altindag - Code Project 
    [3] Rahul Rajat Singh - Code Project

    Update: 20/02/2014
    Update: 21.02/2014
    Update: 03/06/2014
    Hãy tải mã nguồn kèm cơ sở dữ liệu về máy của bạn để thực hành:

    thumbnail ADO.NET: Mô Hình Kết Nối Với SQL Server – Phần 2

    data:label.name author

    premiumpng.com

    Design Publisher

    Download 0
    No comments
    Template in .PSD format

    MR Laboratory License

    Free for personal purpose use . More info


    Buy Now This Template

    No comments:

    Post a Comment

    Commets Download Photoshop Actions, Lightroom Presets, PSD Template, Mockups, Stocks, Vectors, Fonts. Download free

    Newer Post Older Post Home

    Copyright © 2021 MR Laboratory All rights reserved.

    Setting