Tải bản đầy đủ (.pdf) (26 trang)

Các đối tượng cơ bản của ADO.Net

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.66 MB, 26 trang )

I.Các đối tượng cơ bản của ADO.Net


Không cần quá dài dòng .Đối tượng này thực chất là các thư viện (lib) dưới dạng tích hợp
sẵn hoặc là các file dll của Visual Studio. Nó được thiết kế để tăng tốc độ truy cập và
thao tác trên dữ liệu trong môi trường đa lớp. Có thể tác động đến các kiểu cơ sở dữ liệu
như SQL , Access,Oracle ... v v.

Vấn đề nó tăng tốc thế nào thì ta ... kóc quan tâm . Chủ yếu , ta sẽ đi học cách sử dụng
các đối tượng con trong nó để thao tác với cơ sở dữ liệu mà thôi.

Thế nào là cơ sở dữ liệu ? thế nào là đối tượng ? Dot net là gì ? Visual Basic.Net ? ...
v v là những câu hỏi không được trả lời trong mục này .Vì khi đụng đến phần này , yêu
cầu các bạn newbie đã phải nắm được các khái niệm trên.Có thể tham khảo sơ lược về
Dot net và về khái niệm lập trình hướng đối tượng tại đây:
.Còn về cơ sở dữ liệu và đặc biệt là SQL
thì hẹn gặp lại ở chuyên mục khác...

Những thành phần sẽ nghiên cứu trong bài viết này:
+Đối tượng SqlConnection
+Đối tượng SqlDataAdapter
+Đối tượng bảng dữ liệu và bảng view dữ liệu
+Mô hình hiển thị tổng quát


1.Kết nối từ Visual Basic.Net vào Cơ Sở Dữ Liệu của SQL:

Trước tiên hết , trước khi muốn làm điều gì đó với cơ sở dữ liệu của bạn , điều quan trọng
là phải kết nối được vào cơ sở dữ liệu đó.
SqlServer sau khi cài đặt ,nó tạo cho người sử dụng một server (máy chủ) , thông thường
là tại chính máy của người sử dụng .Tại server này , người sử dụng có thể tạo ra các kho


thông tin dữ liệu (database) của mình để mà quản lý.

Vì sao cứ phải tạo ứng dụng tác động đến csdl làm gì ?
Người sử dụng phần mềm hok có bít cách vào Sqlserver và gõ các câu lệnh để tác động
đến csdl như chúng ta . Họ chỉ biết kích chuột , nhìn , kích chuột tiếp , nhận được kết
quả ... hết !Vì vậy ta phải tạo một ứng dụng để họ có thể sử dụng một cách trực quan nhất
.

Ta bắt đầu đi vào đối tượng đầu tiên :

Đối tượng SqlConnection



Đối tượng SqlConnection chứa trong nó 2 cái rất quan trọng là thuộc tính:
+ConnectionString là thuộc tính trả về giá trị là một chuỗi kí tự .Chuỗi này có nhiệm vụ
dẫn đường đến cơ sở dữ liệu mà ta muốn tác động đến.Chuỗi đường dẫn này có dạng như
sau : "server=Tên_server;database=Tên_Database;Kiểu_Kết_Nối" .
Trong đó Kiểu kết nối có thể là :
-- integrated security =SSPI => kết nối ủy quyền windows
-- acc=tên_user;pwd=chuỗi_password => kết nối có account

Ví dụ tớ truy cập vào server nhà tớ , có tên là KHANH\KHANH , cần truy cập vào cơ sở
dữ liệu quanlynhansu và kiểu kết nối là uỷ quyền windows thì tớ sẽ viết như sau :
"server=KHANH\KHANH;database= quanlynhansu;integrated security =SSPI"
Đương nhiên khi khai báo thì phải mô tả rõ đối tượng.Đầu tiên ta khai báo một biến mang
tên bienketnoi thuộc về đối tượng ConnectionString để có thể sử dụng thuộc tính kết nối
của nó :
Dim bienketnoi as new ConnectionString()
Rồi mới sử dụng thuộc tính:

bienketnoi.ConnectionString="server=KHANH\KHANH;database=
quanlynhansu;integrated security =SSPI"
+Phương thức Open():
OK rồi , sau khi đã có đường dẫn kết nối đến cơ sở dữ liệu , ta gọi phương thức Open()
của đối tượng kết nối để mở đường kết nối theo đường đã khai báo :
bienketnoi.Open()
Nhưng để chắc chắn sự kết nối thành công , ta để một bẫy lỗi Try Catch như sau :
Mã PHP:

Dim bienketnoi as new ConnectionString()
Try
bienketnoi.ConnectionString = "server=KHANH\KHANH;database=d
etai;integrated security=SSPI"
bienketnoi.Open()
MsgBox("connected!")
Catch ex As Exception
MsgBox(ex.ToString)
End Try

2.Đối tượng SqlDataAdapter:



Đối tượng này có thể hiểu là bộ chuyển đổi dữ liệu từ đinh dạng của SQL sang dạng dữ
liệu của Visual Studio , để có thể hiển thị dữ liệu trên Visual Studio.Để có thể lấy dữ liệu
từ SQL , nó cần một đường dẫn dẫn đến cơ sở dữ liệu cần chuyển đổi (đương nhiên , kô
biết chuyển ở đâu thì làm sao chuyển ? ) và một dạng lệnh SQL để có thể chuyển đổi dữ
liệu theo yêu cầu nhất định:

Dim da as new SqlDataAdapter(“chuỗilệnh”,biến_KN.ConnectionString)


Ví dụ , cần lấy tất cả dữ liệu từ bảng tblA để chuyển sang dữ liệu của VS với điều kiện
bảng A nằm ở server KHANH\KHANH , trong cơ sở dữ liệu quanlynhansu , ta khai báo
bộ chuyển đổi như sau :

Dim da as new SqlDataAdapter(“select * from tblA”,bienketnoi.ConnectionString)
với biến kết nối bienketnoi lấy từ ví dụ trước.

Sau khi đã có được khối dữ liệu lưu trữ trong da .Muốn đem ra để hiển thị , ta cần đổ dữ
liệu ra một cái kho chuyên lưu trữ dữ liệu dạng bảng của VS đã cho sẵn mang tên
DataTable.Trước khi sử dụng DataTable , ta hãy khai báo nó

Dim tb as new DataTable

Để đổ dữ liệu vào tb , ta dùng phương thức Fill của da:

da.Fill(tb)

Và cuối cùng .Trước khi hiển thị , ta hãy tìm hiểu đối tượng DataGrid của VisualStudio.
Chọn đối tượng này từ bảng Toolboxs , kéo thả vào trong Form ( nếu chưa có thì ta phải
add từ Choose ToolBox Items).Đối tượng này có thuộc tính DataSource , chuyên dùng để
nhận lấy dữ liệu từ DataTable hoặc DataSet( cái này sẽ bàn đến ở phần sau).Ngoài ra còn
có đối tượng DataGridView , cho phép hiển thị bảng dữ liệu và add các mini tools box
bên trong nó .Cuối cùng là đối tượng ListView , cho phép hiển thị dữ liệu dưới dạng list
li
ệt kê.
Sau khi thả đối tượng DataGrid vào , đặt tên là DataGrid1 , ta viết tiếp :

DataGrid1.DataSource = tb;


Đương nhiên sau khi có dữ liệu trong DataSource , nội dung sẽ output ra ngoài của
DataGrid1. Sau đây là một ví dụ:
Mã PHP:
Dim da As New SqlDataAdapter("select * from dssv", Form1.bienketnoi)
Dim tb As New DataTable
da.Fill(tb)
DataGrid1.DataSource = tb

Kết quả hiển thị khi thực thi:


Như vậy ,ta có một mô hình hiển thị tổng quát là :


Ở phần tới , ta sẽ bàn đến đối tượng SqlCommand , với cách thực thi sâu sắc hơn cho đối
tượng SqlDataAdapter .

3.SqlCommand


+Vì sao phải dùng SqlCommand? Ta có thể truyền câu lệnh thông qua
SqlDataAdapter cơ mà ?
Hờ hờ , đúng là thế... Nhưng nếu câu lệnh cần tùy biến thì seo , tức là câu lệnh cần
truyền là dạng có tham số đầu vào... ta sẽ phải làm thế nào giờ . Do đó cần phải có đối
t
ượng riêng để xử lý cho tình huống đại loại như thế !
SqlCommand là đối tượng như thế nào ?


Hình ảnh phát nhỉ


Ở đây , nó có 3 thuộc tính cơ bản là :
Connection : dùng để chỉ rõ lệnh này sẽ tác động đến cơ sở dữ liệu nào , ở đâu
CommandText : trả về chuỗi câu lệnh mà ta cần viết
CommandType : trả về dạng câu lệnh mà ta viết ở CommandText, nếu dạng câu lệnh ở
CommandText là dạng lệnh thông thường thì sẽ trả về CommandType.Text, nếu dạng
lênh ở CommandText là dạng thủ tục thì sẽ trả về CommandType.StoredProcedure

Ví dụ : muốn định nghĩa một lệnh đọc toàn bộ các dòng từ một bảng, vẫn dùng biến kết
nối như ở phần 2. Ta có thể viết:
Mã PHP:
Dim sc As New SqlCommand()
sc.Connection = bienketnoi
sc.CommandText = "select * from tblA"
sc.CommandType = CommandType.Text


Dịch nghĩa : ta có một đối tượng sc là một đối tượng lệnh , sẽ thực thi lệnh được dẫn
đường bởi bienketnoi, nội dung câu lệnh là select * from tblA và dạng của câu lệnh này
là dạng Text

Tiếp theo , ta lại viết một store procedure hienthitblA với nội dung là select * from tblA.
và lúc g
ọi thủ tục này bằng SqlCommand thì có thể viết là :
Mã PHP:
Dim sc As New SqlCommand()
sc.Connection = bienketnoi
sc.CommandText = "hienthitblA"
sc.CommandType = CommandType.StoredProcedure



Dịch nghĩa : ta có một đối tượng sc là một đối tượng lệnh , sẽ thực thi lệnh được dẫn
đường bởi bienketnoi, nội dung câu lệnh là hienthitblA và dạng của câu lệnh này là dạng
StoredProcedure

Ok rồi, một cách ngắn gọn hơn , phương thức khởi tạo của SqlCommand sẽ cho phép ta
viết gọn gàng hơn:
Dim sc as new SqlCommand("Chuỗi_câu_lệnh",Biến_kết_nối)
sc.CommandType=CommandType.kiểu_câu_lệnh

Theo đó, với 1 trong 2 ví dụ trên , ta có thể viết:
Mã PHP:
Dim sc as new SqlCommand("hienthitblA",bienketnoi)
sc.CommandType = CommandType.StoredProcedure


Nếu lệnh thực thi với mục đích hiển thị:


Ta sẽ sử dụng SqlCommand để truyền vào cho SqlDataAdapter, lí do truyền tương thích
vì bản thân SqlCommand đã bao hàm bienketnoi và câu lệnh rồi, nên hoàn toàn truyền
cho SqlDataAdapter được...
Mã PHP:
Dim sc as new SqlCommand("hienthitblA",bienketnoi)
sc.CommandType = CommandType.StoredProcedure
Dim da As New SqlDataAdapter(sc)
Dim tb As New DataTable
da.Fill(tb)
DataGrid1.DataSource = tb



Khi thủ tục có tham số:


Lúc này ta dùng đến lớp đối tượng con Parameters (tham số) của SqlCommand , nó có
chứa phương thức AddWithValues để đưa nội dung vào cho tham số của thủ tục.
Ví dụ ta có 1 store procedure thế này:
Mã PHP:
create procedure insert_tblA
@bien1 as nvarchar(50),
@bien2 as integer
as
insert into tblA
(cot1,cot2)
values
(@bien1,@bien2)


Và giả sử tiếp 2 tham số lấy từ 2 textbox.Vậy thì ta sẽ sử dụng đối tượng sc như sau
Mã PHP:
Dim sc as new SqlCommand("insert_tblA",bienketnoi)
sc.CommandType = CommandType.StoredProcedure
sc.Parameters.AddWithValue("@bien1", textbox1.text)
sc.Parameters.AddWithValue("@bien2", Integer.Parse(textbox2.text))
sc.ExecuteNonQuery()


Lí do phải đổi textbox2.text sang dạng integer vì kiểu của bien2 là kiểu integer.Còn
phương thức ExcuteNonQuery() để thực hiện câu lệnh sc mà không cần đưa ra hiển thị
nào... Lí do vì đây là thủ tục insert_tblA được thực hiện, chỉ với mục đích chèn vào bảng

tblA, nên không cần dùng đến da để đưa hiển thị ra ngoài.

Như vậy , tổng quát của AddWithValue là:
sc.Parameters.AddWithValue("@tên_biến", giá trị tương ứng)
Ở lần này , ta sẽ bàn đến những chiêu thức cơ bản của lập trình CSDL:
+Update (Cập nhật)
+Insert (Thêm)
+Delete (Xóa)
+Search (Tìm kiếm)
+Enumeration (Thống kê)

Và bàn đến kĩ thuật điều khiển DataGridView thông qua bắt sự kiện:
+Nhấp chuột vào DataGridView để lấy thông tin
+Chỉnh sửa trực tiếp dữ liệu trên DataGridView và tự động cập nhật lại csdl
I.Update,Insert,Delete,Search,Enumerati
on


1.Ôn tập đôi chút về Command SQL
Ta lần lượt trải nhanh qua vài bước như sau:
Một số ghi chú:
SEM = SQL Sever EnterpriseManager
SQA = SQL Query Analyzer

Bước 1:

Câu lệnh create
Create table tên_bảng (tên_cột_1 kiểu_cột_1,…,tên_cột_n kiểu_cột_n)



Câu lệnh cho phép tạo một bảng nằm trong một CSDL tương ứng.Sau đó các bạn quay lại
SEM để xem và nhập các dữ liệu vào các cột.
chọn vào CSDL mà bạn vưà tạo (1) rồi chọn đến ô chứa các bảng (2) rồi kích tiếp chuột
phải vào bảng vừa tạo (3) rồi chọn đến Return all rows (4)

Tại đây bạn nhập các dữ liệu như làm với Microsoft Excel vậy !

Câu lệnh select:
Quay tr
ở lại SQA để thực hiện tiếp một số câu lệnh sau…
1. Select * from tên_bảng : Hiển thị tất cả các cột trong bảng


2. Select tên_cột_1,…,tên_cột_n from tên_bảng: Hiển thị một số cột nào đó trong
bảng

3.select tên_cột_1,…,tên_cột_n from tên_bảng
where điều_kiện_logic :Hiển thị các cột phụ thuộc theo điều kiện logic đã chọn
trước.

Điều kiện logic nếu là chữ thì bạn phải thêm dấu ’’ vào hai đầu của chữ cần so sánh trong
điều kiện logic


Bước 2:Các câu lệnh quan trọng trong SQL

Câu lệnh insert
Mã PHP:
insert into tên_bảng hoặc insert into tên_bảng


(cột_1,…,cột_n) (cột_1,…,c
ột_n)
values valu
es
(@biến_1,…,@biến_n) (giá_trị_1,…,giá_tr
ị_n)


Câu lệnh cho phép điền thêm giá trị vào bảng, giá trị có thể là biến ( kí hiệu đối với SQL
là @tên_biến ) hoặc có thể là giá trị cụ thể, nhưng cần chú ý là các giá trị được điền vào
phải phù hợp với kiểu dữ liệu của cột.
Ví dụ như cột stt có kiểu integer thì ta không thể điền chữ ‘a’ vào đó được…

×