Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
2,66 MB
Nội dung
I.Các đối tượngcơ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đốitượ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à đốitượ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ácbạ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 đốitượ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ủabạ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 đốitượng đầu tiên : Đốitượng SqlConnection Đốitượ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ề đốitượ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đốitượ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: Đốitượ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 đốitượng DataGrid của VisualStudio. Chọn đốitượ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óđốitượ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à đốitượng ListView , cho phép hiển thị dữ liệu dưới dạng list li ệt kê. Sau khi thả đốitượ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 đốitượng SqlCommand , với cách thực thi sâu sắc hơn cho đốitượ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à đốitượ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 đốitượng sc là một đốitượ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 đốitượng sc là một đốitượ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 đốitượ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 đốitượ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ảncủ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ácbạ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… [...]... nh t có th cho các thao tác tác ng n cơ s d li u, ta c n i vào b n ch t c a các câu l nh tương tác n cơ s d li u Các câu l nh csdl chia ra làm 2 ph n: truy v n và không truy v n + Truy v n : các câu l nh tương tác n cơ s d li u và l y d li u, ưa ra dư i d ng hi n th b ng Ví d như câu l nh g i b ng, tìm ki m, th ng kê u b t u v i câu select + Không truy v n : các câu l nh tương tác n cơ s d li u ,... ơn gi n 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: Rõ ràng r ng , n u ta mô t ư c t ng data, ta có th i mô t các t ng còn l i r t nhanh có...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ó th t b t kì , không c ph i trùng v i tên c t… các b n th y tên bi n 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... 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 a i u khi n DataGridView M c tiêu... n cơ s d li u , nhưng không l y d li u v Ví d như các l nh thêm s a xóa M t cách dân dã, ta nói : có hai ki u câu l nh , hi n th và kô hi n th , và v i m i d ng này, ta l i có nhi u cách th hi n nó: b ng th t c hay câu l nh tr c ti p Th hi n nó m t cách rõ nét qua m i trư ng h p như sau : Ok r i, ta b t u i mô t t ng data v i hình nh mô t trên Các bư c : + T o m t project m i, t tên nó là vidu3lop... ây, ta s l y 1 b ng trong bài toán T i ây, ta mô t c th cho cơ s d li u c a ta qu n lí c a hàng gas L y b ng bình bán làm ví d B ng này có 3 c t: Mã bình , ngày bán và ơn giá V i 4 ch c năng cơ b n c a nó là hi n th ,thêm ,s a ,xóa s d ng t ng datalayer ã mô t h t các công vi c giao ti p v i server, ta c n m t i tư ng thu c v t ng này s d ng các giao ti p ó: Mã PHP: Dim odata As New Data() +Ti p theo,... Date.Parse(TextBox2.Text), Integer.Pa rse(TextBox3.Text)) DataGridView1.DataSource = obusi.hienthi() End Sub End Class Các bi n truy n vào cho bi n thêm l y t các textbox , như hình minh h a sau: M t khi ã có t ng data chu n, ta có th em làm công nghi p và r t nhanh nh ng cái cơ b n cho 1 bài t p qu n lý v i csdl.Chúc các b n làm c mô hình chu n như ý ! H n g p l i n i dung khác! ... data.vb + i tên Class1.vb trong businesslayer thành clsvidu3lop N u th c hi n úng các bư c như trên, thì b ng Solution Explorer s gi ng th này Gi ta s vi t trong file data.vb như sau : +M t bi n k t n i n cơ s d li u +3 phương th c truy v n (d ng th t c và text) và 1 phương th c kô truy v n ( d ng g i th t c có tham s ) Khai báo các thư vi n Mã PHP: Imports System.Data.SqlClient Imports System.Data B t u... 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... 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() . 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. 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