• Thứ Hai, 21/01/2008 13:38 (GMT+7)

    Cập nhật dữ liệu dùng ADO/ADO.NET

    Câu hỏi :

    Lập trình VB, gặp vướng mắc trong việc thêm mới và cập nhật vào CSDL. Xin hướng dẫn.


     



    Trả lời :
     Bạn không nói rõ là dùng các đối tượng ADO hay ADO .Net để truy xuất database nên chúng tôi sẽ trả lời riêng cho từng trường hợp:

     1. Trường hợp bạn dùng ADO trên VB 6.0 hay VC++. Nếu thiết kế trực quan, thường bạn sẽ dùng 2 đối tượng ADODC (ADO Data Control) và DataGrid để truy xuất dữ liệu (thường trên 1 Table của database), trong đó đối tượng ADODC chứa đối tượng Recordset, đối tượng này chứa tạm các record cần truy xuất, còn DataGrid sẽ hiển thị trực quan các record này cho người dùng xem và hiệu chỉnh. Sau khi đối tượng DataGrid được tạo ra, 4 thuộc tính của nó liên quan đến truy xuất dữ liệu có giá trị mặc định như sau:
     - AllowAddNew = False
     - AllowArrows = True
     -AllowDelete = False
     -AllowUpdate = True
     Như vậy nếu muốn thêm mới record hay xóa record hiện có, bạn cần hiệu chỉnh giá trị của 2 thuộc tính AllowAddNew và AllowDelete về True. Hơn nữa, mỗi khi bạn thêm/xóa/hiệu chỉnh dữ liệu trong DataGrid, nội dung được hiệu chỉnh mới chỉ được cất tạm trong Recordset tương ứng chứ chưa được lưu trực tiếp lên database. Để điều khiển việc lưu nội dung hiệu chỉnh lên database, bạn cần gọi hàm Update hay UpdateBatch của đối tượng Recordset:
     Private Sub btnUpdate_Click()
     'Adodc1 là tên mặc định của ADODC
     Me.Adodc1.Recordset.UpdateBatch
     End Sub
     Nếu bạn không viết code gọi hàm Update hay UpdateBatch database thì chỉ khi ứng dụng kết thúc, máy mới lưu các thông tin cập nhật lên database.

     2. Trường hợp bạn dùng ADO .Net trên VB .Net hay VC#. Trong môi trường Visual Studio .Net, bạn sẽ dùng đối tượng DataGridView trong thiết kế trực quan để tạo phần tử hiển thị/hiệu chỉnh dữ liệu của 1 table trong database và máy sẽ tạo ra một số đối tượng sau:

     DataGridView <---> BindSource <---> DataSet <---> DataAdapter <---> Database trên Database Server
     khi người dùng hiệu chỉnh/thêm/ bớt record trực tiếp trên DataGridView, nội dung được hiệu chỉnh/thêm/bớt chỉ được chứa cục bộ trong DataSet tương ứng. Muốn lưu thông tin hiện có trong DataSet lên Database Server, chương trình phải thực hiện tường minh lệnh Update của đối tượng DataAdapter. Nếu ứng dụng không thực hiện lệnh Update thì khi kết thúc, máy cũng không lưu các hiệu chỉnh mà người dùng đã thực hiện (không giống với đối tượng ADODC của ADO).

     Tóm lại để lưu các nội dung đã hiệu chỉnh trong DataGridView, bạn phải viết tường minh lệnh gọi hàm Update của đối tượng DataAdapter kết hợp với DataGridView khi cần thiết. Cách thông thường nhất là vẽ 1 button trong Form chứa DataGridView có tên là btnUpdate, tạo hàm xử lý Click chuột trên button này và đặt lệnh gọi hàm Update trong hàm xử lý Click chuột của button. Thí dụ sau đây là code của hàm này:

     Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
     Me.YourTableTableAdapter.Update(Me.DataSet1.YourTable)
     End Sub
     trong đó Dataset có tên là DataSet1, nó chứa các record của đối tượng Table tên là YourTable, còn YourTableTableAdapter là tên của DataAdapter kết hợp với DataGridView.
    Chuyên mục: Cơ sở dữ liệu