1. Khai báo :
1.1. Khai báo Namespace kết nối CSDL
1.1. Khai báo Namespace kết nối CSDL
using System.Data.OleDb ; // đối với CSDL là access
hoặc :
1
| using System.Data.SqlClient; // đối với CSDL SQL |
1.2. khai báo 3 biến cơ bản dùng để Kết nối CSDL
1
2
3
| SqlDataAdapter da=new SqlDataAdapter() ; SqlConnection con = new SqlConnection(); DataTable dt=new DataTable() ; |
2 . Tạo Kết nối :
1
2
3
4
5
6
7
8
| void ketnoi() { if (con.State == ConnectionState.Closed) { con.ConnectionString = "<Provider của CSDL>"; con.Open(); } } |
Xem thêm : http://www.connectionstrings.com/
ví dụ : Đối với CSDL là SQL
1
2
3
4
5
6
7
8
9
| void ketnoi() { if (con.State == ConnectionState.Closed) { con.ConnectionString = "Server=(local);database=<tên CSDL>;user ID=sa;password=sa"; con.Open(); } } // sa là tài khoản mặc định trong SQL server |
ví dụ : tên CSDL là QLDIEM
Hoặc : đối với CSDL là access
1
2
3
4
5
6
7
8
| void ketnoi() { if (con.State == ConnectionState.Closed) { con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + " data source= " + Application.StartupPath + "/QUAN_LY_SINH_VIEN.mdb"; con.Open(); } } |
3. Load dữ liệu vào datatable, datagridview, textbox,…
datatable :
datatable :
1
| da.fill(dt); |
datagridview:
1
| datagridview1.DataSource = dt; |
Lấy dữ liệu từ datagridview ra ngoài :
Viết code cho các sự kiện RowHeaderMouseClick,…
Viết code cho các sự kiện RowHeaderMouseClick,…
1
2
| int i = int.Parse(e.RowIndex.ToString()); this.Textbox1.Text = this.Datagridview.Rows.Cells[0].Value.ToString(); |
[i]Hoặc có thể dùng datatable:
1
| this.Textbox1.Text = dt.Rows[0].ToString(); |
textbox :
1
| textbox1.Databindings.add(new Binding("text",datatable,""); |
[i]ví dụ:
1
| txt_masv.DataBindings.Add(new Binding("text", dt_sinhvien, "MaSV")); |
datetimepicker :
1
| datetimepicker .add(new Binding("value",datatable,""); |
ví dụ :
1
| datetimepicker .add(new Binding("value",datatable,"NgaySinh"); |
combobox :
1
2
3
| cbo.DataSource = dt; cbo.ValueMember="datamember";// giá trị Items của combobox cbo.DisplayMember ="datamember; // tên hiển thị Items |
ví dụ :
1
2
3
| cbo_lop.DataSource = dt_sinhvien; cbo_lop.DisplayMember = "TenLop"; cbo_lop.ValueMember="MaLop"; |
Giải thích: dữ liệu hiển thị trên cbo là “TenLop” nhưng giá trị nhận đc khi thao tác (click) items của combobox là “MaLop” –> từ từ sẽ hiểu
4. Next, Previous, Last, First, Count
Cách 1 : Dùng “BindingContext “
‘ Next
Cách 1 : Dùng “BindingContext “
‘ Next
1
| this.BindingContext[dt].Position += 1; |
‘ Previous
1
| this.BindingContext[dt].Position -= 1; |
‘ Last
1
| Me.BindingContext[dt].Position = Me.BindingContext.Item(dt).Count - 1; |
‘ First
1
| C1: DataGridView1.CurrentCell = DataGridView1["tên hàng", 0]; |
1
| ví dụ : this.dgv_sinhvien.CurrentCell = dgv_sinhvien["MaSV", 0]; |
1
| C2: this.BindingContext[dt_sinhvien].Position = 0; |
Cách 2 : Dùng “Bindingsource”
ví dụ : Khi viết code cho button ” Next”
ví dụ : Khi viết code cho button ” Next”
1
2
3
4
| BindingSource binding=new BindingSource(); binding.DataSource =dt ; DataGridView1.DataSource =binding ; binding.MoveNext(); |
Ý nghĩa : BindingSoure cung cấp các phương thức “MoveNext, MoveFirst,..” , ta chỉ việc khai báo datasource của gián tiếp với dt thông qua DataGridView1Bindingsource là sử dụng đc các giao thức đó
‘ Count
1
| dt.Rows.Count |
5. Thêm – Xóa – Sửa
5.1. Thêm :
5.1.1. : Phương pháp : Dùng Commandbuider để thực thi những thay đổi trong datatable
B1 : Khởi tạo hàng mới trong datable
5.1. Thêm :
5.1.1. : Phương pháp : Dùng Commandbuider để thực thi những thay đổi trong datatable
B1 : Khởi tạo hàng mới trong datable
1
| DataRow newrow=dt.NewRow(); |
B2 : đưa dữ liệu vào hàng mới tạo
1
2
3
| newrow["<field>"] = <dữ liệu cần thêm>; ................................................................... dt.Rows.Add(newrow); |
B3 : dùng commanbuider thực thi những thay đổi trong datatable
1
2
3
| SqlCommandBuilder cb = new SqlCommandBuilder(da); da.Update(dt); cb.Dispose(); |
ví dụ :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| void them() { DataRow newrow = dt_sinhvien.NewRow(); newrow["Masv"] = txt_masv.Text; newrow["HoTen"] = txt_hoten.Text; newrow["NgaySinh"] = dtp_ngaysinh.Value; newrow["QueQuan"] = txt_qq.Text; newrow["MaLop"] = cbo_lop.SelectedValue; dt_sinhvien.Rows.Add(newrow); SqlCommandBuilder cb = new SqlCommandBuilder(da_sinhvien); da_sinhvien.Update(dt_sinhvien); cb.Dispose(); MessageBox.Show("xong"); } |
5.2. Xóa:
5.2.1. Phương pháp 1: Dùng ExecuteNonQuery() hoặc ExecuteScalar() để thực thi trực tiếp command SQl vào CSDL
5.2.1. Phương pháp 1: Dùng ExecuteNonQuery() hoặc ExecuteScalar() để thực thi trực tiếp command SQl vào CSDL
1
2
3
4
5
6
| void xoa() { SqlCommand cmd = new SqlCommand(<lệnh SQL xóa >, con); cmd.ExecuteNonQuery(); cmd.Dispose(); } |
ví dụ :
1
2
3
4
5
6
7
8
9
| void xoa() { DataRow row = dt_sinhvien.Select("MaSV = '" + txt_masv.Text + "'")[0]; SqlCommand cmd = new SqlCommand("delete from tbl_SinhVien where MaSV='" +txt_masv.Text + "'", con); cmd.ExecuteNonQuery(); row.Delete(); cmd.Dispose(); MessageBox.Show("Xóa xong"); } |
5.3. Sửa :
5.3.1. Phương pháp 1: Dùng câu lệnh thực thi ExecuteNonQuery
5.3.1. Phương pháp 1: Dùng câu lệnh thực thi ExecuteNonQuery
1
2
3
| string sql= "Update <tên table> set field1= 'giá trị 1', field2= 'giá trị 2',....." SqlCommand cmd = new SqlCommand(sql, con); cmd.ExecuteNonQuery(); |
ví dụ :
1
2
3
4
5
6
7
8
| void sua() { string sql ; sql= "update tbl_SinhVien set MaSV='" + txt_masv .Text + "',HoTen='" + txt_hoten.Text+ "',NgaySinh='" + dtp_ngaysinh.Value + "',MaLop='" + cbo_lop.SelectedValue +"',QueQuan='" + txt_qq.Text + "'"; SqlCommand cmd = new SqlCommand(sql, con); cmd.ExecuteNonQuery(); MessageBox .Show ("Sửa xong"); } |
Mong được sự góp ý của mọi người để bài viết hoàn thiện hơn.
No Comment to " Căn bản về kết nối CSDL SQL trong C# "