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:
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
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.
- 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.
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
- 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.
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=TrueLư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 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./// <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.
Bài tiếp theo Kết nối tới SQL Server và dùng Stored Procedure
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:
ADO.NET: Mô Hình Kết Nối Với SQL Server – Phần 2
Related Tags :WritingObsolete
No comments:
Post a Comment
Commets Download Photoshop Actions, Lightroom Presets, PSD Template, Mockups, Stocks, Vectors, Fonts. Download free