|
KINH NGHIỆM LẬP
TRÌNH |
|
Đọc dữ liệu Access
vào ListBox của VB.NET |
|
Hỏi:
Em lập trình VB.NET với CSDL là Access. Xin chỉ giúp
em làm cách nào để dùng câu lệnh SQL đưa từng phần
bản ghi vào ListBox. Ví dụ như lúc đầu có 10 bản ghi
hiển thị trong ListBox, khi click chuột thì 10 bản
ghi tiếp theo sẽ được đưa vào tiếp. |
|
Đáp: Trong VB.NET, để truy cập cơ sở dữ liệu (CSDL),
bà con phải xài các lớp trong System.Data.DLL.
Các lớp này được chia (căn cứ vào chức năng) thành
nhiều namespace, trong đó có 2 namespace tương tự
nhau là System.Data.OleDb (nối với nguồn dữ
liệu OLE DB, như Microsoft Access hoặc Visual Foxro)
và System.Data.SqlClient (sử dụng nguồn dữ
liệu Microsoft SQL Server 7.0 hoặc cao hơn). |
|
Như vậy để dùng CSDL Access, phải xài namespace
System.Data.OleDb. Trong namespace
này, các lớp bà con mình khoái xài nhất là: |
• OleDbConnection: nối kết đến nguồn dữ liệu
OLE DB.
• OleDbCommand: thực thi các câu lệnh SQL đối
với cơ sở dữ liệu OLE DB.
• OleDbDataReader. đọc dữ liệu được trả về từ
đối tượng OleDbCommand (sau khi đã xài hai
lớp trên để truy xuất nguồn dữ liệu OLE DB). |
Bây giờ, bà con hãy xúm vào thử đọc nguồn dữ liệu
Access, đưa vào ListBox cho... vui nhé!
Đương nhiên bà con phải mở VB.NET rồi tạo một dự án
Windows Application. Căn cứ vào bảng 1 và
hình 1, bà con đặt để các thuộc tính cho biểu mẫu
Form1 cùng các ô điều khiển trên nó (một nút
lệnh và một ô danh sách). Xong xuôi, bà con mở cửa
sổ Code của biểu mẫu frmADONet để gõ các đoạn
mã. |
|
Bảng 1: Các ô điều khiển
cần thiết kế
|
Ô điều khiển |
Thuộc tính |
Trị |
|
Form |
Name |
frmADONet |
|
ListBox |
Name |
lstEmployees |
|
Button |
Name |
Button1 |
|
|
Text |
Đọc lần nữa |
|
|
Hình 1: Biểu mẫu ví dụ
 |
|
Cụ thể, bà con thêm vào ngay trước và sau dòng
Public Class frmADONet các dòng lệnh để thu được
đoạn mã 1. Sau đó, gõ đoạn mã 2 vào thủ tục xử lý
tình huống Load của biểu mẫu. Cuối cùng là
đoạn mã 3, xử lý tình huống Click của nút
lệnh Button1. |
Đoạn mã 1:
Imports System.Data.OleDb
Public Class frmADONet
Inherits System.Windows.Forms.Form
Dim myAccessConnection As OleDbConnection
Dim dbReader As OleDbDataReader
Dim dbCmd As OleDbCommand = New _
OleDbCommand("SELECT
Employees.FirstName,Employees.LastName FROM
Employees")
Dim nSoBanGhi As Integer = 2
Dim I As Integer, lDayDuRoi As Boolean |
Đoạn mã 2:
Private Sub frmADONet_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Try
myAccessConnection = New
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"
& _
"Data Source=D:\Program Files\Microsoft Visual
Studio\VB98\NWIND.MDB")
myAccessConnection.Open()
dbCmd.Connection = myAccessConnection
dbReader =
dbCmd.ExecuteReader(CommandBehavior.SingleResult)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub |
Đoạn mã 3:
Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Try
lDayDuRoi = False
I = 0
Do While (dbReader.Read())
lstEmployees.Items.Add(dbReader.GetString(0) & " " &
dbReader.GetString(1))
I = I + 1
If (I >= nSoBanGhi) Then
lDayDuRoi = True
Exit Do
End If
Loop
If Not lDayDuRoi Then
MsgBox("Đã hết thông tin cần đọc rồi !")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub |
|
Ví dụ của ta "chôm" CSDL có sẵn của Access (hoặc
Visual Basic) mang tên Northwind.MDB (có thể
mang tên khác là NWIND.MDB). Nội dung dữ liệu
gồm hai cột FirstName và LastName của
bảng Employees. |
|
Thủ tục xử lý tình huống Load của biểu mẫu
mần công việc xử lý lệnh SQL để mang kết quả truy
vấn (query) về cho đối tượng OleDbDataReader
có tên dbReader, sẵn sàng để mỗi khi bà con
“bộp” vào nút Button1 thì chỉ cần moi dữ liệu
từ đây, nhét vào ô danh sách. |
|
Tui sử dụng biến nSoBanGhi để xác định mỗi
lần đọc tối đa là bao nhiêu bản ghi (ví dụ này là
2). Biến lDayDuRoi để xác định xem còn bản
ghi nào trong dbReader nữa không. |
|
Chương Can Chíp |
|
|