Visual Basic.NET &
Database
Windows Form programming with VB.Net 2005. 2
Giới thiệu:
Các công nghệ truy cập dữ liệu của Microsoft như
DAO (Data Access Object), ODBC (Open DataBase
Connectivity), RDO (Remote Data Object), ADO
(ActiveX Data Objects)
Tuy nhiên từ khi .NET Framework ra đời thì công
nghệ ADO.NET đã được tích hợp, ADO.NET:
Chứa các lớp cho phép các ứng dụng connect data
sources
Execute commands
Manage disconnected data (quản lý dữ liệu đã ngắt
kết nối).
2
Windows Form programming with VB.Net 2005. 3
Giới thiệu (tt):
Với ADO.NET người lập trình có thể viết ít
mã lệnh thao tác cơ sở dữ liệu hơn so với các
công nghệ trước trong các ứng dụng client-server
hoặc các ứng dụng trên desktop.
Mặt khác, trong ASP.NET từ phiên bản .NET
Framework 2.0 trở lên có thêm các thao tác với cơ
sở dữ liệu mà không sử dụng ADO.NET như
SqlDataSource, LINQ hoặc Profiles.
Windows Form programming with VB.Net 2005. 4
Buổi 6: VB.NET & Database (CSDL)
Mục tiêu của bài: Sử dụng được các lớp trong
thư viện ADO.NET tương tác với CSDL:
Mô tả cách thức kết nối và giao tiếp với CSDL
Mô tả được chức năng và cách thức sử dụng các
lớp DataSet, Datatable, Datarow, DataColumn để
đọc dữ liệu.
Đọc dữ liệu với DataReader và hiển thị trên các
lớp kế thừa từ ComboBox, Listbox, TextBox...
Cập nhật dữ liệu với Dataset và DataAdapter
3
Windows Form programming with VB.Net 2005. 5
Kiến trúc ADO.NET
ADO.NET là đối
tượng dùng để
thao tác với CSDL
trong
.NetFramework;
các ngôn ngữ lập
trình trong Visual
studio (trong đó
có VB.Net) dùng
phương thức kết
nối này để giao
tiếp với CSDL
DataAdapter
Windows Form programming with VB.Net 2005. 6
Kiến trúc ADO.NET
Có thể chia làm 2 phần chính:
Managed Provider Component: bao gồm các đối
tượng như: DataAdapter, DataReader, Connection,
Command giữ nhiệm vụ làm việc trực tiếp với dữ
liệu như database, file,...
Content Component: bao gồm các đối tượng như
DataSet, DataTable, DataView, DataRow,
DataColumn, DataRelation ...đại diện cho dữ liệu
thực sự cần làm việc.
4
Windows Form programming with VB.Net 2005. 7
Content Component:
Content Component:
là các đối tượng đại
diện cho dữ liệu cần
xử lý, bao gồm các đối
tượng sau:
DataSet
DataTable
DataView
DataRow
DataColumn
DataRelation
Windows Form programming with VB.Net 2005. 8
Content Component:
DataSet: là hình ảnh của CSDL trong bộ nhớ, nó
chứa các bảng dữ liệu trong các DataTable và các
mối quan hệ trong Datarelation
DataTable: giống như bảng dữ liệu, dùng chứa dữ
liệu trên ứng dụng
Dataview: là "Hình ảnh" của DataTable, một
DataTable có thể có nhiều Dataview, thông qua
Dataviewt có thể sắp xếp dữ liệu, lọc dữ liệu trong
DataTable
DataColumn: chứa các cột trong DataTable
DataRow: chứa các dòng trong DataTable
5
Windows Form programming with VB.Net 2005. 9
Content Component:
DataRelation: chứa các mối ràng buộc trong CSDL, có
thể chứa:
* Unique Constraint or Primary Key Constraint:
đảm bảo tính duy nhất về giá trị của một cột trong table
* Foreign Key Constraint: ràng buộc khóa ngoại
Windows Form programming with VB.Net 2005. 10
Microsoft cung cấp hai bộ Provider component trong
phiên bản ADO.NET là OLEDB và SQL Server
OLEDB managed provider: dùng thao tác với các loại
CSDL (Access, Excel, Oracle, IBM...), bao gồm các đối
tượng sau:
OleDBConnection
OleDBCommand
OleDBParemeter
OleDBDataReader
OleDBDataAdapter
OLEDB: Namespace Imports System.Data.OLEDB
Managed Provider Component
6
Windows Form programming with VB.Net 2005. 11
SQL Server managed provider: dùng thao tác với
CSDL SQL Server, bao gồm các đối tượng:
SQLConnection
SQLCommand
SQLParemeter
SQLDataReader
SQLDataAdapter
Để sử dụng Provider nào ta phải viết lệnh Imports
(khai báo Namespace) trên đầu đối mỗi class
SQL Server: Imports System.Data.SQLClient
Managed Provider Component (tt)
Windows Form programming with VB.Net 2005. 12
Oracle managed provider: dùng thao tác với CSDL
SQL Server, bao gồm các đối tượng:
OracleConnection
OracleCommand
OracleParemeter
OracleDataReader
OracleDataAdapter
Ocracle: Imports Oracle.DataAccess.Client
Managed Provider Component (tt)
7
Windows Form programming with VB.Net 2005. 13
Connection: liên kết với CSDL, các đối tượng khác
phải thông qua đối tượng Connection để thao tác với
CSDL
Command: là đối tượng dùng thực hiện các câu truy
vấn (SQL)
Parameter: là đối tượng dùng truyền tham số cho
Command
DataReader: chứa dữ liệu lấy từ CSDL, chỉ đọc, chỉ
duyệt từ trên xuống
DataAdapter: là đối tượng trung gian giữa CSDL và
DataSet, thông qua đối tượng này ta có thể lấy dữ
liệu từ CSDL đưa lên Dataset và cập nhật dữ liệu từ
DataSet xuống CSDL
Managed Provider Component (tt)
Windows Form programming with VB.Net 2005. 14
Ghi chú: Tùy theo CSDL chúng ta sử dụng (Access,
SQl Server, Ocrale) các Managed Provider
Component phải được dùng hợp lý:
VD:
OleDbConnection OleDbCommand
SqlConnection SqlCommand
OracleConnection OracleCommand
......
Managed Provider Component (tt)
8
Windows Form programming with VB.Net 2005. 15
Dùng tạo kết nối giữa ứng dụng và CSDL
Các thuộc tính (Properties) của OLEDBConnection
ConnectionString: chuỗi liên kết CSDL, liên kết
với Access với Cú pháp sau:
"Provider=Microsoft.jet.oledb.4.0;Data Source=
Đườngdẫn\tênCSDL"
State: chỉ ra trạng thái của đối tượng kết nối
(Connection Object) hiện tại như: Closed, Open,
Broken...)
OleDbConnection Object ()
Windows Form programming with VB.Net 2005. 16
Một số Phương thức thường dùng của Connection
Open: mở kết nối đến CSDL cùng với các thông
tin đã được chúng ta khai báo trong
ConnectionString
Close: Đóng kết nối với nguồn dữ liệu. Sử dụng
phương thức này để đóng Connection đang mở.
Dispose: Xoá mọi tài nguyên liên quan đến
Connection trên vùng nhớ
OleDbConnection Object (tt)
9
Windows Form programming with VB.Net 2005. 17
Khai báo OleDbConnection dùng MS Access:
'Imports provider ở đầu màn hình Code
Imports SysTem.Data
Imports SysTem.Data.OleDb
' Khai báo và khởi tạo OLEDbConnection
Dim strConnection As String = _
"Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source =" & ""
Dim cn as New OleDbConnection(strConnection)
cn.Open()
'Khai báo trong class thường dùng từ khóa Private thay
cho Dim
OleDbConnection Object (tt)
Windows Form programming with VB.Net 2005. 18
Nếu lưu CSDL trong cùng thư mục file chạy chương trình
ta có thể dùng thuộc tính Application.StartupPath sau:
Dim cn as new OleDbConnection
Dim strConnection as string = _
"Provider=microsoft.jet.oledb.4.0;data source=" & _
Application.StartupPath& "\TenCSDL.mdb"
cn.ConnectionString = strConnection
Try
ConnectionState = cn.State
If cn.State = Data.ConnectionState.Closed Then
cn.Open()
End If
Catch ex As Exception
MessageBox.Show("Lỗi Kết nối CSDL!", "Lỗi",
MessageBoxButtons.RetryCancel, MessageBoxIcon.Error)
End Try
Connection Object (tt)
10
Windows Form programming with VB.Net 2005. 19
Imports System.Data
Imports System.Data.OleDb
Public Class clsDataLayer
Private strConnection As String
Private cn As New OleDbConnection
Public Sub New()
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
& Application.StartupPath & "\QLHoaDon.mdb"
cn.ConnectionString = strConnection
End Sub ' Kết thúc Sub khởi tạo class clsDataLayer
Public Sub GetConnection()
Dim ConnectionState As ConnectionState
Try
ConnectionState = cn.State
If cn.State = Data.ConnectionState.Closed Then
cn.Open()
End If
Catch ex As Exception
MsgBox(ex.Message& " Lỗi mở CSDL!", "Thông báo lỗi")
End Try
End Sub ' Kết thúc Sub mở kết nối CSDL
End Class
Windows Form programming with VB.Net 2005. 20
Là đối tượng được dùng để các truy vấn trên CSDL
Khai báo: thường dùng 2 kiểu khai báo
Khái báo đơn giản:
Dim cmd As New OleDbCommand()
Khái báo có khởi tạo:
Dim cmd As New OleDbCommand (strSQL, objConnection)
Trong trường hợp này chuỗi truy vấn strSQL và
objConnection phải được khai báo trước hoặc đã được
gọi ở thủ tục hoặc hàm nào đó trước khi khai báo theo
kiểu này)
OleDbCommand Object:
11
Windows Form programming with VB.Net 2005. 21
CommandText: truy vấn SQL, tên bảng hoặc tên
stored procedure muốn thực hiện trên nguồn dữ
liệu.
Commandtype: Giá trị chỉ định cho biết nội dung
CommandText phải dùng là gì với các giá trị sau:
Text: (mặc định) một câu lệnh SQL
TableDirect: tên của một hoặc nhiều bảng
Storedprocedure: tên một thủ tục nội lại trong
CSDL
(Các giá trị này khi lập trình VB.Net sẽ tự hiển thị để chọn)
Properties thường dùng của Command Object
Windows Form programming with VB.Net 2005. 22
Connection: Đối tượng Connection sử dụng cho Command
Parameters: Tập hợp các tham số dùng trong Command,
thường dùng cho truy vấn có ĐK (WHERE)
VD:
Dim cmd As New OleDbCommand()
cmd.Connection = cn ' Connection Object is opened
cmd.CommandText = "sp_Login"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("Uname", UserName)
cmd.Parameters.AddWithValue("Pws", Password)
' UserName, Password là 2 biến nhập liệu được truyền vào
Properties thường dùng của Command Object
12
Windows Form programming with VB.Net 2005. 23
ExecuteReader: Phương thức này (không hoặc có 1
tham số) trả về một đối tượng DataReader, Trường
hợp có tham số các tham số thông dụng là:
CommandBehavior.SingleRow: Câu truy vấn
chỉ trả về 1 dòng duy nhất
CommandBehavior.SchemaOnly : Câu truy vấn
không trả về dữ liệu mà trả về thông tin các
cột của bảng
CommandBehavior.CloseConnection: đối tượng
connection sẽ đóng khi đối tượng DataReader
đóng
Các Phương thức của Command Object:
Windows Form programming with VB.Net 2005. 24
ExecuteNonquery:
Gọi thực hiện các câu truy vấn cập nhật dữ liệu:
INSERT, UPDATE, DELETE
Phương thức này trả về số dòng chịu tác động của
Command, nếu có lỗi trả về -1
ExecuteScalar:
Phương thức này thực hiện lệnh của Command và
chỉ trả về giá trị của cột đầu tiên và dòng đầu tiên.
phương thức này khi muốn Command thực hiện
các hàm tính toán thống kê SUM, COUNT, AVG,
MAX, MIN... trên nguồn dữ liệu ngay lúc thực thi
Các Phương thức của Command Object:
13
Windows Form programming with VB.Net 2005. 25
Public Function GetCommand() as OleDbCommand
Dim cn As New OleDbConnection
Dim cmd As New OleDbCommand
Dim ConnectionState As ConnectionState
Dim strConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=D:\VB.NET\ADO.NET\QuanLyHoaDon\QLHoaDon.mdb"
cn.ConnectionString = strConnection
Try
ConnectionState = cn.State
If cn.State = Data.ConnectionState.Closed Then
cn.Open()
End If
cmd.Connection = cn
Return Cmd
Catch ex As Exception
Return Nothing
MessageBox.Show(ex.Message)
End Try
End function
Windows Form programming with VB.Net 2005. 26
Là đối tượng truy cập dữ liệu trực tiếp, sử dụng
cursor phía Server và duy trì kết nối với Server trong
suốt quá trình đọc dữ liệu, chứa dữ liệu trả về từ
phương thức ExecuteReader của command object
Các thuộc tính của OledbReader:
FieldCount: Trả về số dòng hiện hành của
DataReader.
IsClosed: Cho biết DataReader đã đóng chưa?
Item: Trị của cột truyền vào. Tham số truyền có thể là
tên cột hoặc số thứ tự của cột (từ 0n-1 cột)
OleDbReader Object: (DataReader)
14
Windows Form programming with VB.Net 2005. 27
Các phương thức của OledbReader:
Close(): Đóng DataReader.
GetFieldType(i): kiểu dữ liệu của cột thứ i
GetName(i): Trả về tên của cột thứ i
GetOrdinal(name): Trả về số thứ tự của cột
(tính từ 0)
GetSchemaTable(): Trả về bảng chứa thông tin
mô tả cột của DataReader.
OleDbReader Object: (tt)
Windows Form programming with VB.Net 2005. 28
Các phương thức của OledbReader (tt):
GetValue(i): Trả về giá trị của cột thứ i
Read(): Di chuyển đến dòng kế tiếp và trả về True
nếu còn dòng để di chuyển, ngược lại trả về False
NextResult(): Advances the data reader to the
next result, when reading the results of batch SQL
statements
OleDbReader Object: (tt)
15
Windows Form programming with VB.Net 2005. 29
Public Function GetDataReader(ByVal StoreProceureName As String,
Optional ByVal arrParams() As String = Nothing, Optional ByVal
arrValues() As Object = Nothing) As OleDbDataReader
Dim rd As OleDbDataReader
Try
If Not (arrParams Is Nothing) Then
For nIndex As Integer = 0 To (arrParams.Length - 1)
cmd.Parameters.AddWithValue(arrParams(nIndex),
arrValues(nIndex))
Next
End If
rd = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Return rd
Catch ex As Exception
MsgBox(ex.Message)
Return Nothing
Finally
' Neu Dong Ket noi thi Reader khong doc duoc
cmd.Dispose()
End Try
End Function
Windows Form programming with VB.Net 2005. 30
OleDbDataAdapter Object (DataAdapter)
Là một bộ gồm bốn đối tượng Command:
SelectCommand: cho phép lấy thông tin từ nguồn
dữ liệu về
InsertCommand: cho phép thêm dữ liệu vào bảng
trong nguồn dữ liệu.
UpdateCommand: cho phép sửa đổi dữ liệu trên
bảng trong nguồn dữ liệu.
DeleteCommand: cho phép hủy bỏ dữ liệu trên bảng
trong nguồn dữ liệu.
16
Windows Form programming with VB.Net 2005. 31
OleDbDataAdapter Object (tt)
Cú pháp khai báo:
Dim Bien as New OleDbDataAdapter
Khởi tạo:
Bien= new OleDbDataAdapter (,)
Trong đó:
: Câu lệnh truy vấn hoặc tên storedprocedure để
thực hiện truy xuất từ nguồn dữ liệu
: Đối tượng Connection đã kết nối với
CSDL
Windows Form programming with VB.Net 2005. 32
OleDbDataAdapter Object (DataAdapter)
Các thuộc tính (Properties):
SelectCommand: Đối tượng Command chứa nội
dung lệnh truy xuất các mẩu tin từ nguồn dữ liệu
DeleteCommand: Đối tượngCommand chứa nội
dung lệnh hủy các mẩu tin trên nguồn dữ liệu
InsertCommand: Đối tượng Command chứa nội
dung lệnh chèn các mẩu tin mới vào nguồn dữ liệu.
Update command: Đối tượng Command chứa nội
dung lệnh cập nhật các mẩu tin vào nguồn dữ liệu.
17
Windows Form programming with VB.Net 2005. 33
OleDbDataAdapter Object (DataAdapter)
Các Phương thức OleDbDataAdapter:
Fill(): Đổ dữ liệu vào DataTable có sẵn
Fill(): Đổ dữ liệu vào DataSet có sẵn. Dữ
liệu được lấy về Dataset dưới dạng các DataTable,
với tên mặc định là Table1, Table2,...
Fill(,): Đổ dữ liệu vào
DataSet cho bảng ; nếu chưa có,
bảng sẽ được tạo với tên là . (Cách
này thường được dùng nhiều hơn)
Windows Form programming with VB.Net 2005. 34
OleDbDataAdapter Object (DataAdapter)
Chú ý:
Khi dùng nhiều DataAdapter để đổ dữ liệu của
nhiều bảng vào DataSet, nếu không chỉ rõ đổ vào
bảng nào trong DataSet, dữ liệu sẽ đổ chung vào một
bảng, số cột là tổng số cột có tên khác nhau trong
các bảng từ nguồn dữ liệu, trên mỗi dòng cột nào
không có dữ liệu tương ứng sẽ mang trị Null.
Chúng ta có thể dùng một DataAdapter để đổ dữ
liệu của nhiều bảng vào DataSet với nội dung lệnh
truy vấn là các lệnh liên tiếp và cách nhau bằng dấu
(;) (MS. SQL Server)
18
Windows Form programming with VB.Net 2005. 35
DataTable
Đối tượng chứa dữ liệu trên Dataset
Khai báo: Dim Ten_Bien as new DataTable
DataTable: được tạo từ tập hợp DataRows và
DataColums
DataColumns: tập hợp các cột có trong DataTable
DataRows: tập hợp các dòng dữ liệu
Windows Form programming with VB.Net 2005. 36
DataColumn
Tạo mới DataColumn
Dim Ten_Cot New DataColumn(,)
Trong đó:
: Tên muốn đặt cho cột
: Kiểu dữ liệu của cột, được khai báo thông
qua cú pháp System.Type.GetType("System.Tênkiểu")
Đưa cột vào bảng:
TenBang.Columns.add(Ten_Cot)
19
Windows Form programming with VB.Net 2005. 37
DataRows
DataRows là tập hợp các dòng dữ liệu của bảng. Mọi
tham chiếu đến dòng đều thông qua tập hợp này. Sau
đây là một số chức năng của DataRow
Các thuộc tính:
Rows.Count: Cho biết số dòng dữ liệu Trong DataTable
Rows.Item(i) hoặc Rows(i): tham chiếu đến dòng i
Rows.Item(i)(j): lấy dữ liệu của cột j trên dòng i
Rows.Item(i)("Têncột"): lấy dữ liệu của cột có tên cột
trên dòng i (i bắt đầu từ 0)
Windows Form programming with VB.Net 2005. 38
DataRows
Để thêm dòng vào table: TableName.Rows.Add()
Ví dụ: thêm một dòng dữ liệu vào Table Khoa
Dim dong As DataRow = Khoa.NewRow()
dong(0)= "VL"
dong(1)= "VậtLý"
Khoa.Rows.Add(dong)
Rows.RemoveAt(): Xóa dòng khỏi bảng
Rows.Remove(dong): Xóa dòng khỏi bảng
Rows.Clear(): Xóa toàn bộ các dòng dữ liệu của bảng
20
Windows Form programming with VB.Net 2005. 39
Dataview
Dataview: là"Khung nhìn" của DataTable, thôngqua
Dataview, ta có thể hiển thị dữ liệu lấy từ DataTable
theo yêu cầu của người dùng
Khai báo:
Dim Ten_bien as New DataView()
Ta có thể tạo một View từ bảng bằng:
Dim Ten_bien As DataView = Ten_Bang.DefaultView
Windows Form programming with VB.Net 2005. 40
Dataview
Thuộc tính và phương thức quan trọng của Dataview
RowFilter: Biểu thức lọc của DataView để thay đổi cách
hiện thị dữ liệu
Cú pháp: Ten_view.RowFilter="Tencot=Giá tri and/or ..."
Sort :Biểu thức sắp xếp,
Cú pháp: Ten_view.Sort="Tencot asc/desc,..."
Find:Tìm kiếm, trả về vị trí dòng thỏa điều kiện, tìm
theo cột nào phải sắp xếp dữ liệu theo cột đó,
Cú pháp: Ten_View.Sort = "Ten_Cot cần tìm"
vi_tri = Ten_view.Find("Giá trị")
21
Windows Form programming with VB.Net 2005. 41
DataSet
Dataset là một lớp
dùng để thao tác với dữ
liệu theo mô hình dữ liệu
phi kết nối.
Nó được coi như là
một kho chứa các table
Dữ liệu có thể cập nhật
trong các bảng này và
khi muốn cập nhật vào
CSDL thì DataSet sẽ
thực hiện việc cập nhật
dữ liệu thông qua
DataAdapter
Windows Form programming with VB.Net 2005. 42
DataSet
Các bảng trong DataSet có thể do
DataAdapter Fill vào hoặc cũng có thể là các
bảng được tạo thành từ lớp DataTable
Các bảng này được quản lý bởi tập hợp
Tables của lớp DataSet.
Một Data set có thể lưu trữ nhiều bảng
(Table)
Khai báo
dim Ten_Bien as New DataSet()
22
Windows Form programming with VB.Net 2005. 43
Các phương thức quan trọng của DataSet:
Ten_bien.Tables.Add(): đưa bảng vào DataSet
Ten_bien.Tables.Remove(): Xóa bảng ra khỏi
DataSet
Ten_bien.Tables.Contains(): Kiểm tra bảng có
thuộc về DataSet
Ten_Bien.Tables.CanRemove(): trả về true nếu có
thể xóa bảng
Ten_bien.Tables.Clear(): Xóa tất cả các bảng khỏi DataSet
Ten_Bien.Dispose: Xóa DataSet
Ten_Bien.Clear: Xóa toàn bộ nội dung trong DataSet:
Windows Form programming with VB.Net 2005. 44
Public Function UpdateRows(ByVal queryString As String, ByVal ds
As DataSet, ByVal tableName As String) As DataSet
Try
Dim da As New OleDbDataAdapter()
da.SelectCommand = New OleDbCommand(queryString, cn)
Dim cb As OleDbCommandBuilder = New
OleDbCommandBuilder(da)
da.Fill(ds, tableName)
da.Update(ds, tableName)
Return ds
Catch ex As Exception
MsgBox(ex.Message)
Return Nothing
End Try
End Function
23
Windows Form programming with VB.Net 2005. 45
DataGridView Control
Hiển thị dữ liệu dạng khung lưới dữ liệu thường được
lấy từ DataTable, DataView hoặc DataSet
Cú pháp lấy dữ liệu từ DataTable:
Tên_dgv. DataSource =
Cú pháp lấy dữ liệu từ DataView:
Tên_dgv. DataSource =
Cú pháp lấy dữ liệu từ DataSet:
Tên_dgv. DataSource =
Tên_dgv. DataMember =
Bạn đang đọc truyện trên: AzTruyen.Top