xử lý access database với c

21
Xử lý Access Database với C#. Tại sao không?? Hiện nay, có rất nhiều hệ quản trị cơ sở dữ liệu mạnh mẽ như Access, SQL Server, Oracle v.v... nhưng trong trong khuôn khổ bài bài viết này mình chỉ đề cập đến Access vì nó phổ biến, gọn nhẹ, dễ sử dụng và đa số các máy tính đều có cài Access. Bài viết này là quá trình tích lũy những kinh nghiệm trong 3 tuần học hỏi của mình nên không thể tránh khỏi sai sót, nếu các bạn thấy chỗ nào sai sót cứ việc góp ý mình sẽ chỉnh lại. 1. Giới thiệu Học không gì tốt bằng là học qua ví dụ nên chúng ta cùng tạo một project “Database Access Project” 1a. Giao diện Form chính Gồm có button: btnCreateSample : Tạo ra cơ sở dữ liệu mẫu để thao tác btnLoad : Load Database SolieuTest.mdb btnInsert : chèn thêm 1 Record vào Database btnUpdate : Update 1 Record trong Database btnDelete : Delete 1 Record trong Database btnClear : Xóa tất cả dữ liệu trong các Textbox 5 Textbox tương ứng với các cột STT, Name, Address, Phone, Email trong Database 1 DataGridView để load dữ liệu Database lên 1b. Access File mẫu File Access mà ta sử dụng tên là “SolieuTest.mdb” cấu trúc gồm có 1 bảng tên là “BangMau” bao gồm các cột sau: STT : Number (Primary key nghĩa là mỗi Record chỉ có một STT

Upload: nguyenquocdan

Post on 21-Nov-2014

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Xử lý Access Database với C

Xử lý Access Database với C#. Tại sao không??

Hiện nay, có rất nhiều hệ quản trị cơ sở dữ liệu mạnh mẽ như Access, SQL Server, Oracle v.v... nhưng trong trong khuôn khổ bài bài viết này mình chỉ đề cập đến Access vì nó phổ biến, gọn nhẹ, dễ sử dụng và đa số các máy tính đều có cài Access.Bài viết này là quá trình tích lũy những kinh nghiệm trong 3 tuần học hỏi của mình nên không thể tránh khỏi sai sót, nếu các bạn thấy chỗ nào sai sót cứ việc góp ý mình sẽ chỉnh lại.

1. Giới thiệu Học không gì tốt bằng là học qua ví dụ nên chúng ta cùng tạo một project “Database Access Project”

1a. Giao diện Form chính

Gồm có button:btnCreateSample : Tạo ra cơ sở dữ liệu mẫu để thao tácbtnLoad : Load Database SolieuTest.mdbbtnInsert : chèn thêm 1 Record vào DatabasebtnUpdate : Update 1 Record trong DatabasebtnDelete : Delete 1 Record trong DatabasebtnClear : Xóa tất cả dữ liệu trong các Textbox5 Textbox tương ứng với các cột STT, Name, Address, Phone, Email trong Database1 DataGridView để load dữ liệu Database lên1b. Access File mẫuFile Access mà ta sử dụng tên là “SolieuTest.mdb” cấu trúc gồm có 1 bảng tên là “BangMau” bao gồm các cột sau:STT : Number (Primary key nghĩa là mỗi Record chỉ có một STT duy nhất.)Name, Address, Phone, Email : TextFile này được set Password bởi chức năng Set Database Password của Access. Password = 123456File “SolieuTest.mdb” này được lưu trong thư mục Debug của Project

2. Using các namespace cần thiết Đối với mỗi loại Database thì Net cung cấp cho ta một Namespace riêng biệt để thao tác với chúng, để có thể làm việc được với Access Database thì ta cần tham chiếu đến các namespace sauMã: Chọn tất cả

Page 2: Xử lý Access Database với C

using System.Data; //Namespace cho các đối tượng Datausing System.Data.OleDb; // Đây là namespace mà ta sẽ sử dụng cho Access 

3. Đối tượng kết nối OleDbConnection. Rất quan trọng , nó giúp tạo ra một kết nối giữa ứng dụng của mình và Access Database của bạn. Quan trọng nhất là bạn phải tạo được một Connection String đúng đắn.

3a.Connection String : hướng dẫn cho ứng dụng cách kết nối với Access. Chuỗi connection String bao gồm các thành phần sauProvider = Microsoft.Jet.OLEDB.4.0 // Dùng cho accessData Source = Path đến file Access của bạnJet OLEDB:Database Password = Pass của file access mà bạn đã set bằng chức năng Set Database PasswordUser Id = admin (đây là mặc định của access)Để tìm thêm các Connect String phục vụ cho các nhu cầu khác các bạn có thể tham khảo tại đâyhttp://www.connectionstrings.com/3b. Tạo và hủy đối tượng ConnectĐể thuận tiện, theo mình bạn nên tạo một kết nối có tầm vực cục bộ trong form và 2 thủ tục (1 dùng cho việc tạo kết nối khi cần thiết và 1 cho việc sử dụng xong thì hủy kết nối ngay để giải phóng tài nguyên máy tính). Bạn nên tập làm quen như thế, nếu đã xài xong một đối tượng nào đó thì nên hủy nó đi để giải phóng tài nguyênMã: Chọn tất cả

public partial class frmMain : Form    {        #region "Biến cục bộ trong Form" //Được khai báo ngay dưới khai báo class frmMain    private OleDbConnection objConnect;            private DataTable objDataTable;        #endregion        #region "Tạo Kết nối và hủy kết nối"            /// <summary>            /// Tạo một Connection            /// </summary>            private void subCreateConnect()            {                String varChuoiConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ;" +         "Data Source =" + Application.StartupPath + @"\Solieutest.mdb;" +  "Jet OLEDB:Database Password = 123456;"+                          "User ID = admin";                objConnect = new OleDbConnection(varChuoiConnect);//Tạo đối tượng Connect          objConnect.Open(); //Mở kết nối            }            /// <summary>            /// Hủy kết nối            /// </summary>    private void subDestroyConnect()            {                objConnect.Close(); //Đóng kết nối                objConnect.Dispose();//Giải phóng tài nguyên                objConnect = null; //Hủy đối tượng            }        #endregion 

Các bạn thấy trong đoạn code trên có nhiều điểm đặc biết không.#region "Biến cục bộ trong Form"#endregionCó nhiệm vụ bao gộp đoạn code mình lại thôi nhăm phân chia khu vực có các đoạn code thực hiện những chức năng liên quan với nhau để dễ xử lýApplication.StartupPath là đường dẫn của thư mục đang chưa file Exe ứng dụng của bạn.@"\Solieutest.mdb” : trong đây quan trọng là chữ @ (nó đứng trước chuỗi) nó cho trình

Page 3: Xử lý Access Database với C

dịch biết rằng cần phải giữ nguyên giá trị chuỗi như vậy. Nếu không có chữ @ thì VS sẽ báo lỗi bởi vì dấu \ là một ký tự đặc biệt trong C#.Nếu bạn ko xài ký tự @ thì phải viết như sau <\\Solieutest.mdb>. Database Access Project.rar

Project mẫu đề tham khảo(63.46 KiB) Đã tải về 6525 lần.

Trong project này do mình sơ suất nên có một nhầm lần, do đó các bạn cần lưu ý sửa lại để có thể chạy đượcTrong thủ tục xủ lý Button click Mã: Chọn tất cả

private void btnLoad_Click(object sender, EventArgs e)

Các bạn sửa câu SQL lại thành như sauMã: Chọn tất cả

"Select * from DanhsachSV"

4. Đối tượng OleDbCommand Đây là đối tượng vô cùng quan trọng có nhiệm vụ cho ứng dụng biết cần phải làm gì (thêm, sửa xóa) với Access Database. Nó gồm có các thuộc tính quan trọng sau:- Connection : đối tượng Connect mà command sẽ sử dụng- CommandType : phân loại nhiệm vụ mà Command sẽ thực thi, nó có 3 loại : Text, StoredProcedure, TableDirect.- CommandText : nhiệm vụ mà command sẽ thực thi. CommandType và CommandText có liên hệ mật thiết với nhau4a. Tìm hiểu CommandType và CommandText:- CommandType.Text : lúc này CommandText sẽ là một câu lệnh SQL. Ví dụ : "Select * From BangMau where STT=@STT and Name=@Name"- CommandType.StoredProcedure : lúc này CommandText là tên của 1 query (trong Access) hay là 1 StoredProcedure (trong SQL Server).- CommandType.TableDirect : lúc này CommandText là tên 1 Table.4b. Xây dựng một đối tượng Command để truy xuất dữ liệu trong Database.4b1. Command sử dụng câu lệnh SQL trực tiếpMã: Chọn tất cả

1. //Truy vấn dữ liệu2.                 String varSelect = "Select * from

BangMau";//Lệnh SQL3.                 OleDbCommand objCommand = new

OleDbCommand(varSelect, objConnect);

4b2. Command sử dụng lệnh SQL có truyền tham sốĐối với câu lệnh này bạn có thể sử dụng một trong 2 kiểu lệnh SQL sauMã: Chọn tất cả

Page 4: Xử lý Access Database với C

1. //Đặt tên cho các tham số trong SQL2.  objCommand.CommandText = "Select * From BangMau

where STT=@STT and Name=@Name";3.  //Sử dụng dấu ? cho các tham số SQL4.  objCommand.CommandText = "Select * From BangMau

where STT=? and Name=?";5.  

Truyền tham số cho command cho cả 2 cách viết ở trên, nhưng lưu ý rằng vị trí của cac tham số được truyền vào phải đúng theo thứ tự trong câu lệnh SQL nghĩa là STT trước, sau đó mới tới Name.objCommand.Parameters.Add("@STT", OleDbType.Integer).Value = 10;objCommand.Parameters.Add("@Name", OleDbType.VarChar).Value = "Name10";Ở đây các bạn chú ý OleDbType.Integer và OleDbType.VarChar, đây là các kiểu dữ liệu của các tham số này4b3.Command gọi một Query được xây dựng sãn trong file AccessVí dụ trong File access của bạn đã xây dựng sẵn một Query như sauTên : QuerySelectSELECT *FROM BangMauWHERE STT>[@STT];Bây giờ bạn muốn gọi nó raMã: Chọn tất cả

1. OleDbCommand objCommand = new OleDbCommand();2.         objCommand.Connection = objConnect;3.       objCommand.CommandType =

CommandType.StoredProcedure;4.       objCommand.CommandText = "QuerySelect";

//Tên của Query5.       //Truyền tham số6.       objCommand.Parameters.Add("@STT",

OleDbType.Integer).Value = 5;

5. Đọc dữ liệu trong File Access Sau khi bạn đã tạo được một command hoàn chỉnh, các bạn có thể thực thi nó ngay bằng lệnh objCommand.ExecuteReader(), nó sẽ trả về một DataReader.5a. Đọc dữ liệu thông qua DataReaderNếu chỉ cần đọc dữ liệu thì ta nên sử dụng DataReader vì nó gọn nhẹ, nhanh, dễ sử dụng. Ở đây mình ví dụ sử dụng command với SQL trực tiếp, các bạn hãy tự mình ap dụng các loại command còn lại hoặc tham khảo trong projectMã: Chọn tất cả

1. /// <summary>2.             /// Truy xuát dữ liệu thông qua câu

lệnh trực tiếp và DataReader3.             /// </summary>

Page 5: Xử lý Access Database với C

4.             private void subSelectBySQLTructiepQuaDataReader()

5.             {6.                 //Tạo kết nối tới file Access7.                 subCreateConnect();8.                 //Truy vấn dữ liệu9.                 String varSelect = "Select * from

BangMau";//Lệnh SQL10.                 OleDbCommand objCommand = new

OleDbCommand(varSelect, objConnect);11.                 //Tạo DataReader nhận dữ liệu

trả về12.                 OleDbDataReader objReader =

objCommand.ExecuteReader();13.                 //Tạo đối tượng DataTable và

Load DataReader vào14.                 objDataTable = new

DataTable("abc");15.                 objDataTable.Load(objReader);16.                 //Gán dữ liệu vào Datagrid17.                 DGAccess.DataSource =

objDataTable;18.                 subDestroyConnect();19.             }20.  

Ở đoạn code này các bạn chú ý tới dòng sauobjDataTable = new DataTable("abc");DataTable là một đối tượng dại diện cho một bảng và nó cũng có dòng và cột. Câu lệnh trên có ý nghĩa là tạo ra một đối tượng objDataTable và đặt tên nó là “abc”.5b. Đọc dữ liệu thông qua đối tượng DataAdapterĐối tượng Adapter giống như một guồng máy vậy, nó có nhiệm vụ thực thi các command và trả về dữ liệu mà ta sẽ nhận được thông qua các đối tượng như DataTable hay DataSet. Ở đây chúng ta chỉ xét đến đối tượng DataTableỞ đây sẽ sử dụng ví dụ Command có sử dụng Truyền tham sốMã: Chọn tất cả

1. /// <summary>2.             /// Truy xuất dữ liệu thông qua đối

tượng Adapter, DataTable và Command3.             /// </summary>4.             private void subSelectByDataAdapter()5.             {6.                 //Tạo kết nối tới file Access7.                 subCreateConnect();8.                 //Tao Command

Page 6: Xử lý Access Database với C

9.                 OleDbCommand objCommand = new OleDbCommand();

10.                 objCommand.Connection = objConnect;

11.                 objCommand.CommandType = CommandType.Text;

12.                 objCommand.CommandText = "Select * From BangMau where STT>@STT";

13.                 objCommand.Parameters.Add("@STT", OleDbType.Integer).Value = 0;

14.                 //Tạo đối tượng Adapter15.                 OleDbDataAdapter objAdapter =

new OleDbDataAdapter();16.                 objAdapter.SelectCommand =

objCommand;//Nạp command cho DataAdapter17.                 //Tạo DataTable nhận dữ liệu

trả về18.                 objDataTable = new

DataTable("abc");19.                

objAdapter.Fill(objDataTable); //Điền dữ liệu trả về vào Table

20.                 //Gán dữ liệu vào Datagrid21.                 DGAccess.DataSource =

objDataTable;22.                 //Hủy các đối tượng23.                 objCommand.Dispose();24.                 objCommand = null;25.                 objDataTable.Dispose();26.                 objDataTable = null;27.                 objAdapter.Dispose();28.                 objAdapter = null;29.                 subDestroyConnect();30.             }31.  

Ở đây các bạn chú rằng ta sử dụng objAdapter.Fill(objDataTable); để fill giá trị nhận được từ selectcommand vào objDataTable.5c. Viết code cho button Load DatabaseMã: Chọn tất cả

1. private void btnLoad_Click(object sender, EventArgs e)

2.         {3.             DGAccess.DataSource = null;4.             subSelectByDataAdapter();

Page 7: Xử lý Access Database với C

5.             subBindingData();6.         }7.  

6. DataBinding Mình tạm dịch là cầu nối dữ liệu. Ví dụ sau đây là ta binding Datagrid với các textbox, nghĩa là khi ta click vào một dòng trên Datagrid thì dữ liệu trên dòng đó sẽ hiển thị lên các TextboxMã: Chọn tất cả

1. /// <summary>2.             /// Binding dữ liệu với Textbox3.             /// </summary>4.             private void subBindingData()5.             {6.                 txtSTT.DataBindings.Add("Text",

DGAccess.DataSource, "STT");7.                 txtName.DataBindings.Add("Text",

DGAccess.DataSource, "Name");8.                

txtAddress.DataBindings.Add("Text", DGAccess.DataSource, "Address");

9.                 txtPhone.DataBindings.Add("Text", DGAccess.DataSource, "Phone");

10.                 txtEmail.DataBindings.Add("Text", DGAccess.DataSource, "Email");

11.             }12.  

Các bạn chú ý rằng “Text” ở đay nghĩa là ta sẽ lấy dữ liệu trong cột nào đó. Cụ thể là ta sẽ lấy dữ liệu ở các cột STT, Name, Address,Phone, Email và gán cho các Textbox tương ứng.DGAccess.DataSource là dữ liệu nguồn mà ta có được khi sử dụng các phương thức đọc dữ liệu ở trên

7. Insert 1 Record vào trong dữ liệu gốc Một câu lệnh SQL Insert có dạng như sau :Insert Into BangMau Values(‘01’, ‘Nguyen Van A’, ‘Dia chi’, ‘So dien thoai’, ‘Dia chi Email’).Có thể dùng dấu ngoặc kép “” thay thế cho ‘’.Các dữ liệu được chèn vào phải theo đúng thứ tự cột trong file accessĐiều ta cần làm bây giờ là truyền câu lệnh trên vào đối tượng command.7a. Insert Command sử dụng SQL trực tiếpMã: Chọn tất cả

Page 8: Xử lý Access Database với C

1. //Tạo đối tượng Command2.                 OleDbCommand objCommand = new

OleDbCommand();3.                 objCommand.Connection =

objConnect;4.                 objCommand.CommandType =

CommandType.Text;5.                 objCommand.CommandText = "Insert

into BangMau values(" + 6.                                         "'" +

txtSTT.Text + "'" + "," +7.                                         "'" +

txtName.Text + "'" + "," +8.                                         "'" +

txtAddress.Text + "'" + "," +9.                                         "'" +

txtPhone.Text + "'" + "," +10.                                         "'" +

txtEmail.Text + "'" + ")";11.                 objCommand.ExecuteNonQuery();

Ở đây các bạn cần chú ý rằng khi ta đã có một command hoàn chỉnh thì ta sé dùng objCommand.ExecuteNonQuery() để thực thi command đó. ExecuteNonQuery() được sử dụng cho các command Insert, Update, Delete7b. Insert Command sử dụng SQL có truyền tham sốMã: Chọn tất cả

1. //Tạo đối tượng Command2.                 OleDbCommand objCommand = new

OleDbCommand();3.                 objCommand.Connection =

objConnect;4.                 objCommand.CommandType =

CommandType.Text;5.                 objCommand.CommandText = "Insert

into BangMau values(?,?,?,?,?)";6.                 objCommand.Parameters.Add("@STT",

OleDbType.Integer).Value = Convert.ToInt32(txtSTT.Text);

7.                 objCommand.Parameters.Add("@Name", OleDbType.VarChar).Value = txtName.Text;

8.                 objCommand.Parameters.Add("@Address", OleDbType.VarChar).Value = txtAddress.Text;

9.                 objCommand.Parameters.Add("@Phone", OleDbType.VarChar).Value = txtPhone.Text;

Page 9: Xử lý Access Database với C

10.                 objCommand.Parameters.Add("@Email", OleDbType.VarChar).Value = txtEmail.Text;

11.           objCommand.ExecuteNonQuery();

7c. Insert Command thông qua đối tượng DataAdapter và DataTableCác bạn nên nhớ rằng sự thay đổi của DataTable không hề làm thay đổi của dữ liệu gốc. Muốn làm thay đổi dữ liệu gốc ta phải viết các command Insert, Update, Delete rồi tới kết nối tới dữ liệu gốc đó, sau đó ta sẽ cập nhật sự thay đổi của DataTable lên dữ liệu gốc.Ví dụ : Bây giờ nếu ta muốn Insert thêm một record vào dữ liệu gốc, ta phải thêm một record vào DataTable.Mã: Chọn tất cả

1. //Tạo kết nối tới file Access2.                 subCreateConnect();3.                 //Nạp dữ liệu vào DataTable4.                 objDataTable = new

DataTable("Abc");5.                 //Tạo đối tượng Adapter và Fill

vào DataTable6.                 OleDbDataAdapter objAdapter = new

OleDbDataAdapter("select * from bangmau",objConnect) ;

7.                 objAdapter.Fill(objDataTable);8.                 //Insert dữ liệu vào DataTable9.                 DataRow objRow =

objDataTable.NewRow();10.                 objRow["STT"] =

Convert.ToInt32(txtSTT.Text);11.                 objRow["Name"] =

txtName.Text;12.                 objRow["Address"] =

txtAddress.Text;13.                 objRow["Phone"] =

txtPhone.Text;14.                 objRow["Email"] =

txtEmail.Text;15.           objDataTable.Rows.Add(objRow);

Sau khi đã thêm được 1 dòng vào DataTable rồi, bây giờ ta viết câu lệnh Insert rồi connect với file Access để chèn Record này vào dữ liệu gốc, dữ liệu được truyền cho các tham số trong command này là lấy từ Record mới được chèn vào DataTable.Mã: Chọn tất cả

1. //Tạo đối tượng Command

Page 10: Xử lý Access Database với C

2.                 OleDbCommand objCommand = new OleDbCommand();

3.                 objCommand.Connection = objConnect;

4.                 objCommand.CommandType = CommandType.Text;

5.                 objCommand.CommandText = "Insert into BangMau values(@STT,@Name,@Address,@Phone,@Email)";

6.             //Truyền giá trị cho các tham số lấy từ các cột của  DataTable

7.                 objCommand.Parameters.Add("@STT", OleDbType.Integer, 20, "STT");

8.                 objCommand.Parameters.Add("@Name", OleDbType.VarChar,20,"Name");

9.                 objCommand.Parameters.Add("@Address", OleDbType.VarChar,20,"Address");

10.                 objCommand.Parameters.Add("@Phone", OleDbType.VarChar,20,"Phone");

11.                 objCommand.Parameters.Add("@Email", OleDbType.VarChar,20,"Email");

Sau khi tạo được đối tượng command Insert ta gán nó vào cho dataAdapter và gọi thủ tục Update để thi hành lệnh InsertMã: Chọn tất cả

1. //Insert dữ liệu vào nguồn2.                 objAdapter.InsertCommand =

objCommand;3.                 objAdapter.Update(objDataTable);

7d. Viết code cho button InsertMã: Chọn tất cả

1. private void Insert_Click(object sender, EventArgs e)

2.         {3.             subInsertByAdapter();4.             btnLoad_Click(null, null);5.         }

8. Update một Record trong Dữ liệu gốc Câu lệnh SQL Update có cấu trúc như sau:

Page 11: Xử lý Access Database với C

Update BangMau Set Name =’adfsdf’, Address=’dfdf’, Phone=’456464’, Email =’[email protected]’ where STT=’01’8a. Update Command sử dụng SQL trực tiếpMã: Chọn tất cả

1. //Tạo đối tượng command2.                 OleDbCommand objCommand = new

OleDbCommand();3.                 objCommand.Connection =

objConnect;4.                 objCommand.CommandType =

CommandType.Text;5.                 objCommand.CommandText = "Update

Bangmau Set " +6.                                         "Name = "

+ "'" + txtName.Text + "'" + "," +7.                                         "Address =

" + "'" + txtAddress.Text + "'" + "," +8.                                         "Phone = "

+ "'" + txtPhone.Text + "'" + "," +9.                                         "Email = "

+ "'" + txtEmail.Text + "'" +10.                                        

"Where STT = " + Convert.ToInt32(txtSTT.Text);11.                objCommand.ExecuteNonQuery();

8b.Update Command sử dụng SQL có truyền tham sốMã: Chọn tất cả

1. //Tạo đối tượng command2.                 OleDbCommand objCommand = new

OleDbCommand();3.                 objCommand.Connection =

objConnect;4.                 objCommand.CommandType =

CommandType.Text;5.                 objCommand.CommandText = "Update

Bangmau " +6.                                          "Set

Name=@Name, Address=@Address, Phone=@Phone, Email=@Email " +

7.                                          "Where STT=@STT";

8.                 objCommand.Parameters.Add("@Name", OleDbType.VarChar).Value = txtName.Text;

9.                 objCommand.Parameters.Add("@Address", OleDbType.VarChar).Value = txtAddress.Text;

Page 12: Xử lý Access Database với C

10.                 objCommand.Parameters.Add("@Phone", OleDbType.VarChar).Value = txtPhone.Text;

11.                 objCommand.Parameters.Add("@Email", OleDbType.VarChar).Value = txtEmail.Text;

12.                 objCommand.Parameters.Add("@STT", OleDbType.Integer).Value = Convert.ToInt32(txtSTT.Text);

13.                 objCommand.ExecuteNonQuery();

8c. Update dữ liệu thông qua DataAdapterNhư ta đã nói ở trên muốn làm thay đổi dữ liệu gốc thông qua đối tượng Adapter thì ta phải làm thay đổi dữ liệu trong đối tượng DataTable sau đó mối Update sự thay đổi này lên Dữ liệu gốc bằng Command Update.Bây giờ muốn sửa đổi một record trong Datatable ta phải lọc được Record đó ra bằng Function Select của đối tượng DataTable.Mã: Chọn tất cả

1. //Tạo kết nối tới file Access2.                     subCreateConnect();3.                     //Nạp dữ liệu vào DataTable4.                     objDataTable = new

DataTable("Abc");5.                     //Tạo đối tượng Adapter và

Fill vào DataTable6.                     OleDbDataAdapter objAdapter =

new OleDbDataAdapter("select * from bangmau",objConnect) ;

7.                     objAdapter.Fill(objDataTable);8.                     //Update dữ liệu vào DataTable 9.                     //Chọn ra dòng cần chỉnh sửa

dữ liệu10.                     DataRow[] objRow =

objDataTable.Select("STT = " + Convert.ToInt32(txtSTT.Text)) ;

11.                     objRow[0]["Name"] = txtName.Text;

12.                     objRow[0]["Address"] = txtAddress.Text;

13.                     objRow[0]["Phone"] = txtPhone.Text;

14.                     objRow[0]["Email"] = txtEmail.Text;

Page 13: Xử lý Access Database với C

Ở đoạn code trên chúng ta thấy rằng tham số truyền vào function Select cũng giống như trong SQL vậy, nó có dạng STT=’01’ objDataTable.Select("STT = " + Convert.ToInt32(txtSTT.Text))Giá trị trả về của function Select là một Mảng DataRow. DataRow[] objRowNhưng ở đầu bài viết ta đã có nói STT ở đây là Primary key, do đó thì ta dùng điều kiện STT với Select thì giá trị trả về chỉ bao gồm một dòng duy nhất và đó là Dòng đâu tiên objRow[0] trong Mảng.Sau khi đã chỉnh sửa dòng trên thì nhiệm vụ của ta chỉ là viết command Update, rồi Update sự thay đổi đó lên dữ liệu gốc thông qua AdapterMã: Chọn tất cả

1. //Tạo đối tượng Command2.                     OleDbCommand objCommand = new

OleDbCommand();3.                     objCommand.Connection =

objConnect;4.                     objCommand.CommandType =

CommandType.Text;5.                     objCommand.CommandText =

"Update Bangmau " +6.                                              "Set

Name=@Name, Address=@Address, Phone=@Phone, Email=@Email " +

7.                                             "Where STT=@STT";

8.                     objCommand.Parameters.Add("@Name", OleDbType.VarChar,20,"Name");

9.                     objCommand.Parameters.Add("@Address", OleDbType.VarChar,20,"Address");

10.                     objCommand.Parameters.Add("@Phone", OleDbType.VarChar,20,"Phone");

11.                     objCommand.Parameters.Add("@Email", OleDbType.VarChar,20,"Email");

12.                     objCommand.Parameters.Add("@STT", OleDbType.Integer, 20, "STT");

13.                     //Update dữ liệu nguồn14.                     objAdapter.UpdateCommand

= objCommand;15.           objAdapter.Update(objDataTable);

8d. Viết code cho button Update

Page 14: Xử lý Access Database với C

Mã: Chọn tất cả1. private void btnUpdate_Click(object sender,

EventArgs e)2.         {3.             subUpdateCommandHasParameter();4.             btnLoad_Click(null, null);     5.         }

9. Delete 1 Record trong Dữ liệu gốc Câu lệnh SQL Delete có cấu trúc như sau và nó có lẽ lệnh đơn giản nhấtDelete From BangMau Where STT =1Để xóa hết tất cả Dữ liệu trong bảng ta dùng SQL sauDelete From BangMauBây giờ ta sẽ chuyển nó thanh đối tượng Command;9a. Delete Command dùng SQL trực tiếpMã: Chọn tất cả

1. //Tạo command2.                 OleDbCommand objcommand = new

OleDbCommand();3.                 objcommand.Connection=objConnect;4.                 objcommand.CommandType =

CommandType.Text;5.                 objcommand.CommandText = "Delete

From BangMau Where STT = " + Convert.ToInt32(txtSTT.Text)  ;

6.                 objcommand.ExecuteNonQuery();

9b. Delete Command dùng SQL có truyền tham sốMã: Chọn tất cả

1. //Tạo command2.                 OleDbCommand objcommand = new

OleDbCommand();3.                 objcommand.Connection =

objConnect;4.                 objcommand.CommandType =

CommandType.Text;5.                 objcommand.CommandText = "Delete

From BangMau Where STT = ?";6.                 objcommand.Parameters.Add("STT",

OleDbType.Integer).Value = Convert.ToInt32(txtSTT.Text);

7.                 objcommand.ExecuteNonQuery();

Page 15: Xử lý Access Database với C

9c. Delete thông qua DataAdapterCũng tương tự như Insert, Update ta phải lọc ra Record cần xóa trong DataTable và xóa nó. Sau đó update sự thay đổi đó lên dữ liệu gốcMã: Chọn tất cả

1. //Delete Record cần delete trong datatable2.     //Lọc ra dòng cần xóa3.                 DataRow[] objRow =

objDataTable.Select("STT=" + Convert.ToInt32(txtSTT.Text));

4.                 objRow[0].Delete(); //Xóa dòng cần xóa

5.                 //Tạo command6.                 OleDbCommand objcommand = new

OleDbCommand();7.                 objcommand.Connection =

objConnect;8.                 objcommand.CommandType =

CommandType.Text;9.                 objcommand.CommandText = "Delete

From BangMau Where STT = @STT";10.                

objcommand.Parameters.Add("@STT", OleDbType.Integer,5,"STT");

11.                 //Delete dữ liệu của nguồn12.                 objAdapter.DeleteCommand =

objcommand;13.           objAdapter.Update(objDataTable);

9d. Viết code cho button DeleteMã: Chọn tất cả

1. private void btnDelete_Click(object sender, EventArgs e)

2.         {3.            

subDeleteCommandByAdapterCommandBuilder();4.             btnLoad_Click(null, null);     5.         }

10. Đối tượng DataAdapter và OleDbCommandBuilder Từ đầu bài viết đến giờ các bạn có thấy rằng khi ta sử dụng đối tượng DataAdapter với DataTable thì việc viết các command thật là rắc rối, phức tạp và dễ sai không. Có lẽ BillGates cũng hiểu được điều này nên đã tạo ra lớp OleDBCommandBuilder để giúp ta

Page 16: Xử lý Access Database với C

xây dựng tự động các command Insert, Update, Delete.Cách sử dụng OleDBCommandBuilder thì vô cùng đơn giản, OleDbCommandBuilder được sử dụng ngay sau lệnh Fill của DataAdapter. Và Nó sẽ tự động xây dùng các command Insert, Update, Delete cho ta.10a. InsertMã: Chọn tất cả

1. //Tạo đối tượng Adapter và Fill vào DataTable2.                 OleDbDataAdapter objAdapter = new

OleDbDataAdapter("select * from bangmau", objConnect);

3.                 objAdapter.Fill(objDataTable);4.                 //Tạo command cho Adapter5.                 new

OleDbCommandBuilder(objAdapter);6.                 //Insert dữ liệu vào DataTable7.                 DataRow objRow =

objDataTable.NewRow();8.                 objRow["STT"] =

Convert.ToInt32(txtSTT.Text);9.                 objRow["Name"] = txtName.Text;10.                 objRow["Address"] =

txtAddress.Text;11.                 objRow["Phone"] =

txtPhone.Text;12.                 objRow["Email"] =

txtEmail.Text;13.                

objDataTable.Rows.Add(objRow);14.                 //Insert dữ liệu vào nguồn15.                

objAdapter.Update(objDataTable);

10b. Update

Mã: Chọn tất cả1. //Tạo đối tượng Adapter và Fill vào DataTable2.                 OleDbDataAdapter objAdapter = new

OleDbDataAdapter("select * from bangmau", objConnect);

3.                 objAdapter.Fill(objDataTable);4.                 //Xây dựng Command cho Adapter5.                 new

OleDbCommandBuilder(objAdapter);6.                 //Update dữ liệu vào DataTable    

Page 17: Xử lý Access Database với C

7.                 DataRow[] objRow = objDataTable.Select("STT = " + Convert.ToInt32(txtSTT.Text));

8.                 objRow[0]["Name"] = txtName.Text;9.                 objRow[0]["Address"] =

txtAddress.Text;10.                 objRow[0]["Phone"] =

txtPhone.Text;11.                 objRow[0]["Email"] =

txtEmail.Text;12.                 //Update dữ liệu nguồn13.                

objAdapter.Update(objDataTable);

10c. Delete

Mã: Chọn tất cả1. //Tạo Adpater2.                 OleDbDataAdapter objAdapter = new

OleDbDataAdapter("select * from bangmau",objConnect);

3.                 objDataTable = new DataTable();4.                 objAdapter.Fill(objDataTable);5.                 //Xây dựng commandBuilder6.                 new

OleDbCommandBuilder(objAdapter);7.                 //Delete Record cần delete trong

datatable8.                 DataRow[] objRow =

objDataTable.Select("STT=" + Convert.ToInt32(txtSTT.Text));

9.                 objRow[0].Delete();10.                 //Delete dữ liệu nguồn11.           objAdapter.Update(objDataTable);