1. Trang chủ
  2. » Công Nghệ Thông Tin

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

26 706 6
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Các đối tượng cơ bản của ADO.Net
Định dạng
Số trang 26
Dung lượng 2,66 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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:

http://hvktqs.com/forum/showthread.php?tid=46 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

Trang 2

Đố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 :

Trang 3

Đố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 :

Trang 4

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ế !

Trang 5

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à :

Trang 6

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

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:

Trang 7

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:

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)

Trang 8

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…

Trang 9

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.

Trang 10

Đ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

( ộ t_1 , , ộ t_n ) ( c ộ t_1 , ,

ộ 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…

Trang 11

Với kiểu dùng thứ 1 ta cần phải truyền các giá trị vào thông qua các biến

Ở đây tớ cố tình khai báo tên các biến khác hẳn với tên các cột để các bạn thấy tên biến

có thể đặt bất kì , không cứ phải trùng với tên cột…

Câu l ệnh delete

Delete from tên_b ảng Where điều_kiện_logic

Câu lệnh cho phép xoá một dòng hoặc một số dòng nào đó trong bảng mà những dòng

này thoả mãn điều_kiện_logic Còn nếu không có câu lệnh where thì nghĩa là dòng nào

cũng thoả mãn … => xoá hết các dòng , chỉ để trơ lại mỗi tên cột !Theo dõi bảng trước và

sau khi xoá:

Trang 12

Điều kiện logic trong câu lệnh trên là soID>=23 , nghĩa là cứ dòng nào thoả mãn có cột

Câu lệnh cho phép cập nhật dữ liệu của 1 hay nhiều dòng trên 1 hay nhiều cột tại nơi có

điều kiện logic xẩy ra.Theo dõi trước và sau khi Update:

Tại nơi có soID=9 thì dữ liệu hodem và ten tương ứng tại đó đươc thay đổi thành ‘eee’

Trang 13

Một thủ tục có thể có biến truyền vào hoặc không có biến truyền vào

Ví dụ xây dựng một thủ tục không có tham số truyền :

Ví dụ khác về thủ tục có tham số truyền:

Ở thủ tục này , các giá trị 5,’ggg’,’ggg’,20 lần lượt được truyền vào cho

@stt,@hodem,@ten,@soID khi gọi exec tên_thủ_tục

Như vậy cách thực hiện gọi thủ tục là :

Exec tên_thủ_tục giá_trị_1,…,giá_trị_n

Với giá_trị_1,…,giá_trị_n sẽ được lần lượt truyền cho @biến_1,…,@biến_n

2.T ập làm quen với thêm sửa xóa đơn giản vời điều khiển datagridview

Vậy , thông qua phần trên , ta có thể thấy việc thêm sửa xóa khá đơn giản, chỉ là tạo một

số thủ tục , với các biến truyền vào là biến muốn tác động,thay đổi thêm bớt mà thôi, rồi

sau đó gọi các đối tượng cơ bản của ADO.NET ra để khai thác thủ tục

Việc thêm vào khá đơn giản, như phần giới thiệu về đối tượng SqlCommand đã đưa ra ví

dụ Còn việc sửa và xóa, tớ xin được giới thiệu một kĩ thuật điều khiển datagridview một

cách tự biên tự diễn

Trang 14

a Điều khiển DataGridView

Mục tiêu của việc điều khiển để nhằm thực hiện thao tác : đưa chuột lên dòng cần xóa,

sửa trên Datagridview, nhấn nút xóa hoặc chọn giá trị cần sửa đã được hiển thị ra sau khi

nhấn nút cập nhật thì cơ sở dữ liệu trong Sql cũng được cập nhật lại thông tin

Để làm như thế, trước hết ta cần phải bắt được dòng vừa click vào datagridview bằng một

biến donghientai kiểu integer :

donghientai = DataGridView1.CurrentRow.Index

rồi trích chọn giá trị của Datagridview tại một ô i nào đó bằng cách :

dim s as string = DataGridView1.Rows(donghientai).Cells(i).Value.ToString()

b.M ột ví dụ về thêm sửa xóa lợi dụng điều khiển DataGridView

Thông qua việc điều khiển DataGridView nêu trên , ta đã có thể mường tượng ra việc sửa

(update) hoặc xóa(delete) cho một dòng trên bảng dữ liệu

Giả sử ta có bảng dữ liệu bang1, gồm 2 cột : cot1 kiểu int, cot2 kiểu nvarchar(50) Ta xây

dựng các thủ tục store procedure cho nó:

Thủ tục này được truyền thêm biến @gtcot để nhằm tìm đến giá trị của cột 1 trước đó mà

trước khi nó bị thay đổi Việc có thêm biến này do đặc trưng của câu lệnh Vì giả sử cả 2

cột cùng bị thay đổi thì ta biết dựa vào đâu để mà tìm đến dòng của nó mà thay giá trị

mới Nên cần biến này để nhớ giá trị trước khi bi thay đồi

Trang 15

delete from bang1

where bang1 cot1 =@ bien

với kiểu giao diện như trên , ta có thể code cho sự kiện cell_click của datagridview là:

Mã PHP:

Dim donghientai , bienxoa , bienupdate As Integer

Private Sub DataGridView1_CellClick ( ByVal sender As System Object , ByVa

l e As System Windows Forms DataGridViewCellEventArgs ) Handles DataGrid View1 CellClick

donghientai = DataGridView1 CurrentRow Index

bienxoa = Integer Parse ( DataGridView1 Rows ( donghientai ) Cells ( ) Value ToString ())

bienupdate = bienxoa

TextBox1 Text = bienxoa ToString ()

TextBox2 Text = DataGridView1 Rows ( donghientai ) Cells ( ) Value

ToString ()

End Sub

Textbox1,2 là textbox trong group của nút sửa sẽ hiển thị nội dung của dòng được click

vào trên datagridview, cho phép ta sửa nội dung trên các textbox này

Trang 16

Nút sửa :

+bắt lấy giá trị trước khi bị sửa của cột 1 và lưu lại

+gọi thủ tục sửa cho cả 2 cột với giá trị từ textbox 1,2 tại vị trí giá trị vừa lưu

Mã PHP:

Dim sc As New SqlCommand ( "update_bang1" , bkn )

sc CommandType = CommandType StoredProcedure

sc Parameters AddWithValue ( "@gtcot" , bienupdate )

sc Parameters AddWithValue ( "@cot1" , Integer Parse ( TextBox1 Text

))

sc Parameters AddWithValue ( "@cot2" , TextBox2 Text )

sc ExecuteNonQuery ()

Nút xóa:

+bắt lấy giá trị của cột 1 dòng bị xóa và lưu lại

+gọi thủ tục xóa cho dòng tại giá trị vừa lưu

Mã PHP:

Dim sc As New SqlCommand ( "delete_bang1" , bkn )

sc CommandType = CommandType StoredProcedure

sc Parameters AddWithValue ( "@bien" , bienxoa )

sc ExecuteNonQuery ()

Nút Insert:

+Gọi form mới,gồm 2 textbox để nhập giá trị mới

+Có điều khiển dữ liệu cho textbox 1 luôn nhập vào với giá trị số

+Gọi thủ tục insert với 2 giá trị ghi trên textbox này

+Code: Khỏi nói

Thủ tục hiển thị:

+Để linh hoạt ta sẽ xây dựng cho nó truyền vào 1 datagridview và 1 biến kết nối

+Datagridview thì cần truyền kiểu ByRef vì sẽ thay đổi tham chiếu đến datagridview mà

Để làm cho việc lập trình cơ sở dữ liệu được nhanh chóng và công nghiệp, kèm theo tính

chuyên nghiệp của lập trình Mô hình 3 lớp ra đời phục vụ cho mục đích này!

Trước khi bước vào phần này, các bạn hãy đọc kĩ lại các phần ở trang trước để nắm bắt

cụ thể các đối tượng cơ bản của ADO.NET

Ok, rồi, giờ ta bắt đầu với mô hình 3 lớp:

Ngày đăng: 23/10/2013, 20:15

HÌNH ẢNH LIÊN QUAN

Hình  ả nh phát nh ỉ - Các đối tượng cơ bản của ADO.Net
nh ả nh phát nh ỉ (Trang 5)

TỪ KHÓA LIÊN QUAN

w