background img

Bài Viết Mới

ADO.NET Mô Hình Kết Nối Với SQL Server - Phần 2.1.1


Như đã nói, với ADO.NET có hai mô hình sử dụng phổ biến là: Kết Nối & Phi Kết Nối. Hôm nay, chúng ta sẽ tìm hiểu phần mô hình kết Nối.

Phần 2: CÁCH THỨC SỬ DỤNG ADO.NET 


2.1 - Mô Hình Kết Nối
 

   Phần này, chúng ta sẽ tìm hiểu cách thức sử dụng ADO.NET trong mô hình kết nối CSDL. Đ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.
  





2.1.1 Không Sử Dụng Stored Procedure 

Đầu tiên, trong bài này các bạn sẽ được thực hành qua qua ví dụ demo nhỏ qua các bước step-by-step. Sau đó sẽ có Source code đầy đủ để các bạn đối chiều tham khảo.



Created by BravoHex


 a.) Kết nối tới database 



- 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à hàm kết nối đơn giản, ta sẽ gọi hàm này khi cần kết nối tới server:
/// <summary>
/// Hàm thực thi kết nối tới CSDL SQL Server. Sử dụng lớp SqlConnection
/// </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();
}

 

b.) 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
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();
}

 

Hàm Bind dữ liệu từ DataGridView lên các TextBox, Combobox, tạo sẵn trước đó.
/// <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;
}

Hàm Insert
/// <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();

}

 

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();

}

 

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();
}

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




Mã Nguồn ở đường dẫn đầu bài viết.

 
Nguồn: Tự Học IT Online - http://tuhocit.net

0 nhận xét:

Đăng nhận xét

Xem Nhiều