intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Imports System.IO

Chia sẻ: Tran Mai Hung Hung | Ngày: | Loại File: DOCX | Số trang:9

77
lượt xem
9
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

. Access tuy cũng là hệ quản trị cơ sở dữ liệu nhưng nó khác với SQL Server là nó còn cho phép xây dựng thành phần giao diện gồm chung với dữ liệu + các xử lý khác trong cùng tập tin .mdb. Nó nói chung là không phân biệt xử lý client server.

Chủ đề:
Lưu

Nội dung Text: Imports System.IO

  1. Imports System.IO   Public Class Form1   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Butto n1.Click   Dim sDBFile As String = "E:\myDB.mdb" Dim sBackUpFile As String = "E:\myDB_BackUp.mdb"    ' Backup *.mdb database If File.Exists(sDBFile) Then Dim db As New DAO.DBEngine 'CompactDatabase has two parameters, creates a copy of compact DB at the Destination path db.CompactDatabase(sDBFile, sBackUpFile) End If   'Restore the original file from the compacted file If File.Exists(sBackUpFile) Then File.Copy(sBackUpFile, sDBFile, True) End If   End Sub   End Class . Access tuy cũng là hệ quản trị cơ sở dữ liệu nhưng nó khác với SQL Server là nó còn cho phép xây dựng thành  phần giao diện gồm chung với dữ liệu + các xử lý khác trong cùng tập tin .mdb. Nó nói chung là không phân biệt xử lý  client ­ server. 2. Nếu cẩn thận và chuyên nghiêp hơn ta có thể tách làm 2 phần: 1 tập tin chứa dữ liệu và các truy vấn mang tính  tiền xử lý và 1 tập tin chứa thành thành giao diện + các xử lý khác. Với cách làm này ta chỉ cần sao chép dự phòng  đối với tập tin thứ nhất. 3. Sao chép dự phòng đối với Access thật ra chỉ là thao tác copy tập tin. 4. Trong VB.Net có thể viết đoạn mã lệnh đơn giản như sau (Tôi ví dụ minh hoạ bằng ứng dụng loại Console cho đơn  giản trình bày) Imports System.IO Module Module1
  2. Sub Main() Dim f As FileInfo = New FileInfo("C:\Pro_TamHiep.mdb") f.CopyTo("c:\Pro_TamHiep.bak") End Sub End Module Access không có chức năng restore đúng nghĩa như các hệ quản trị cơ sở dữ liệu cao cấp hơn nó như SQL Server,  Oracle.... Tuy nhiên nó có hỗ trợ chức năng tự sửa (menu ­­> tools ­­> database utilities ­­> compact and repair database). Nếu  tự sửa vẫn không được thì đành lấy bản đã sao chép thay thế bản bị hư.  1. Tìm hiểu về khái niệm ADO.Net Trong Net (VB.Net và C#) chỉ tồn tại khái niệm ADO.Net chứ ko tồn tại khái niệm cũ ADO (của VB6.) Các bạn có thể thấy được ADO.Net Model qua hình dưới đây. Có thể diễn đạt theo thứ tự là Database--> Conection--> Command--> DataAdapter--> Datatable hay Dataset và các bạn làm việc theo thứ tự này. 2. Namespace cần thiết để thao tác với Access Để thao tác với Access ta chỉ cần Imports các namespace sau đây Mã: Chọn tất cả 1. Imports System.Data 2. Imports System.Data.OleDb 'sử dụng với access 3. 3. Connect với Database Muốn thao tác với Database dĩ nhiên bước đầu tiên là phải tạo Connect cho nó. Ta tạo như sau: - Connect có tầm vực cục bộ trong Form cần khai báo Ví dụ file cần kết nối là SolieuTest.mdb được đặt trong thư mục Debug và có Password là 123456. Mã: Chọn tất cả 1. Public Class Form1 Dim con As OleDbConnection ' Cục bộ trong Form 2. 3. Private Sub Form1_Load(ByVal sender As System.Object, By Val e AsSystem.EventArgs) Handles MyBase.Load
  3. 4. Dim str As String = "Provider= Microsoft.Jet.OLEDB.4.0;" _ 5. & "Data Source = " & Application.StartupPath & "\SolieuTest.mdb;"_ 6. & "Jet OLEDB:Database Password = 123456" 7. con = New OleDbConnection(str) 8. con.Open() 9. End Sub 10. ................................... 4. Command ( Lệnh ): - Để cho chương trình biết ta cần làm những gì đối với Database như select. Insert................. - Ví dụ đây là command dùng để Select hết tất cả dữ liệu trong bảng ra. Mã: Chọn tất cả 1. Dim command As New OleDbCommand() command.Connection = con ' Kết nối 2. command.CommandType = CommandType.Text 'Loại lệnh 3. sử dụng là Text hay là một query trong access 4. command.CommandText = "Select * From DanhsachSV" 'Lệnh cần làm với Database 5. - Để sử dụng commnand được tốt các bạn cần phải nắm vững ngôn ngữ SQL (trong Box ebook có nhiều sách về SQL) - Nạp tham số cho command --> Very very Important. Ví dụ Mã: Chọn tất cả 1. command.CommandText = "Select * From DanhsachSV Where Name = @Name" Ở đây ta có @Name là tham số mà ta cần phải điền giá trị cho nó, ta gán giá trị như sau Mã: Chọn tất cả 1. commandInsert.Parameters.Add("@Name", OleDbType.VarChar).Value = txtName.Text Vậy là ta đã gán giá trị từ Textbox txtName vào tham số @Name rồi đó 5. DataAdapter và Dataset, DataTable - Chúng ta đã có Connect và commnand rồi, giờ chúng ta cần có một cái máy sử dụng những cái trên để thực thi lệnh mà ta đưa ra --> Đó chính là DataAdapter. - Khai báo một DataAdapter chỉ đơn giản thế này Mã: Chọn tất cả 1. Dim adapter As New OleDbDataAdapter()
  4. Ngoài ra còn các hình thức khởi tạo khác, nhưng chỉ được xài với các loại command thuộc dạng Select và tùy theo cách mà chúng ta cảm thấy quen thuộc nhất Mã: Chọn tất cả 1. OleDbDataAdapter (OleDbCommand) 2. OleDbDataAdapter (StringSelect, OleDbConnection) 3. OleDbDataAdapter (StringSelect, StringConnect) 4. - Sau khi thực hiện lệnh, chúng ta sẽ có được kết quả trả về và nó được lưu trong DataTable (đại diện cho một table ) và DataSet ( đại diện cho một Table Collection). - Lưu ý: Muốn làm thay đổi dữ liệu nguồn (trên file) thì ta phải tác động vào các DataTable hay Dataset đồng thời cung cấp thêm các câu SQL tương ứng để thực thi sự thay đổi đó. Chúng ta sẽ nói chi tiết về vấn đề này trong phần tới. 6. Select dữ liệu - Để cho đơn giản trong quá trình học các đối tượng sau dt và da bạn cho nó có tầm vực cục bộ trong form (nằm chung với vị trí tạo connect) Mã: Chọn tất cả 'Tạo một đối tượng Datatable nhận dữ liệu trả về 1. 2. Dim dt As New DataTable("DanhsachSV") 'Tạo bộ máy DataAdapter thực hiện command 3. 4. Dim da As New OleDbDataAdapter() - Để trích xuất một dữ liệu ra chúng ta dùng đoạn code sau - Ở đây chúng ta xét trường hợp là đã có sẵn đoạn code tạo Connect ở trên rồi Mã: Chọn tất cả 1. Private Sub btnLoad_Click(ByVal sender As System.Object, B yVal e AsSystem.EventArgs) Handles btnLoad.Click 'Tạo command để lấy dữ liệu ra ngoài 2. 3. Dim command As New OleDbCommand() command.Connection = con ' Kết nối 4. command.CommandType = CommandType.Text 'loại lệnh 5. sử dụng là Text hay là một query trong access 6. command.CommandText = "Select * From DanhsachSV" 7. da.SelectCommand = command ‘ gán command cho da da.Fill(dt) 'Nạp dữ liệu vào Table 8. DataGridView1.DataSource = dt 'Load dữ liệu lên 9. DataGridview 10. 11. End Sub 12.
  5. 7. Data Binding - Đôi khi chúng ta thấy cần kết hợp DataGridview và các Textbox, để khi chúng ta click vào một hàng bất kỳ nào trên DataGridview thì dữ liệu của hàng đó sẽ hiện lên Textbox. Đó là kỹ thuật Data Binding. - Thêm đoạn code sau vào sau đoạn code select ở trên các bạn sẽ thấy hiệu quả ngay. Mã: Chọn tất cả 1. 'Databinding txtSTT.DataBindings.Add("Text", dt, "STT") ‘ Ở đây 2. ta cần binding textbox txtSTT với giá trị Text ở cột STT của Table 3. txtName.DataBindings.Add("Text", dt, "Name") 4. txtAdress.DataBindings.Add("Text", dt, "Address") 5. txtPhone.DataBindings.Add("Text", dt, "Phone") 6. txtEmail.DataBindings.Add("Text", dt, "Email") 7. 8. Insert một Row mới vào trong Table - Để insert một Row mới vào File data trước hết ta cần thêm một dòng mới vào DataTable hay DataSet. Mã: Chọn tất cả 1. Private Sub btnInsert_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnInsert.Click 'Tao 1 row moi theo cấu trúc row trong dt 2. 3. Dim row As DataRow = dt.NewRow() 4. row("STT") = txtSTT.Text 5. row("Name") = txtName.Text 6. row("Address") = txtAdress.Text 7. row("Phone") = txtPhone.Text 8. row("Email") = txtEmail.Text dt.Rows.Add(row) ' add row mới này vào dt 9. 10. DataGridView1.DataSource = dt 'Tao command để update sự thay đổi trên vào file 11. data nguồn 12. Dim commandInsert As New OleDbCommand() 13. commandInsert.Connection = con 14. commandInsert.CommandType = CommandType.Text 15. 'SQL for Insert 16. commandInsert.CommandText = "Insert Into DanhsachSV Values (@STT,@Name,@Address,@Phone,@Email)"
  6. 17. 'Nap tham so cho các command trên 18. commandInsert.Parameters.Add("@STT", OleDbType.Numeric, 50, "STT") ' Nạp giá trị cho tham số @STT thông qua giá trị của cột nguồn STT 19. commandInsert.Parameters.Add("@Name", OleDbType.VarChar, 50, "Name") 20. commandInsert.Parameters.Add("@Address", OleDbType.VarChar, 50,"Address") 21. commandInsert.Parameters.Add("@Phone", OleDbType.VarChar, 50, "Phone") 22. commandInsert.Parameters.Add("@Email", OleDbType.VarChar, 50, "Email") 'Dùng da để áp đặt sự thay đổi trên vào File data 23. nguồn 24. da.InsertCommand = commandInsert 'gán command 25. da.Update(dt) 26. 27. End Sub 9. Update (chỉnh sửa một Record) Để chính sửa một Record thì trước tiên bạn phải xác định được Record đó ở đâu trong Database cái đã --> Xác định nó thông qua Primary Key. Ví dụ bạn có giao diện như sau Bạn thấy rằng ta có Primary key ở đây là STT, và khi bạn click vào DataGridview là ta đã lấy được thông tin của Record hiện thời rồi. Vậy đoạn code để Update một record như sau Mã: Chọn tất cả 1. Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnUpdate.Click 2. 'Get Record can update trong Table 3. Dim row As DataRow = dt.Select("STT = '" & Convert.ToInt32(txtSTT.Text) &"'")(0) 4. 'Update row 5. row.BeginEdit() 6. row("Name") = txtName.Text 7. row("Address") = txtAddress.Text 8. row("Phone") = txtPhone.Text 9. row("Email") = txtEmail.Text 10. row.EndEdit()
  7. 'Tao command để update sự thay đổi trên vào file 11. data nguồn 12. Dim commandUpdate As New OleDbCommand() 13. commandUpdate.Connection = con 14. commandUpdate.CommandType = CommandType.Text 15. 'SQL for Update 16. commandUpdate.CommandText = "Update DanhsachSV Set Name=@Name, Address=@Address, Phone=@Phone, Email=@Email Where STT=@STT" 17. 'Nap tham so cho các command trên 18. commandUpdate.Parameters.Add("@Name", OleDbType.VarChar, 20, "Name") 19. commandUpdate.Parameters.Add("@Address", OleDbType.VarChar, 20,"Address") 20. commandUpdate.Parameters.Add("@Phone", OleDbType.VarChar, 20, "Phone") 21. commandUpdate.Parameters.Add("@Email", OleDbType.VarChar, 20, "Email") 22. commandUpdate.Parameters.Add("@STT", OleDbType.Integer, 20, "STT") 'Dùng da để áp đặt sự thay đổi trên vào File data 23. nguồn 24. da.UpdateCommand = commandUpdate 'gán command 25. 'Dim a As New OleDbCommandBuilder(da) 26. da.Update(dt) 27. End Sub 10. Delete 1 Record - Xóa một Record cũng tương tự như Update chỉ khác phần SQL và tham số . - Đây là cái dễ nhất Mã: Chọn tất cả 1. Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnDelete.Click 2. 'Get Record can update trong Table 3. Dim row As DataRow = dt.Select("STT = '" & Convert.ToInt32(txtSTT.Text) &"'")(0) 4. row.BeginEdit() 5. row.Delete() 6. row.EndEdit() 'Tao command để update sự thay đổi trên vào file 7. data nguồn
  8. 8. Dim commandDelete As New OleDbCommand() 9. commandDelete.Connection = con 10. commandDelete.CommandType = CommandType.Text 11. 'SQL for Delete 12. commandDelete.CommandText = "Delete From DanhsachSV Where STT=@STT" 13. 'Nap tham so cho các command trên 14. commandDelete.Parameters.Add("@STT", OleDbType.Numeric, 20, "STT") 'Dùng da để áp đặt sự thay đổi trên vào File data 15. nguồn 16. da.DeleteCommand = commandDelete 'gán command 17. End Sub 18. - Chú ý : Để xóa hết tất cả Record trong bản ta chỉ cần dùng SQL sau “Delete From DanhsachSV” . Các bạn thấy ko có còn tham số nào cả --> ko cần truyền thêm giá trị gì cả 11. Insert, Update, Delete theo kiểu Mì Ăn Liền - Chắc các bạn đều thấy rằng, trong các phần Insert, Update, Delete ở trên khá phức tạp đòi hỏi phải luyện tập thường xuyên mới có thể thành thạo cũng như nắm vững SQL. - Do đó, Net cung cấp sẵn cho ta một đối tượng cho phép ta ko cần phải mất công sức để viết lại những cái trên - áp dụng tốt cho đa số trường hợp nhưng tốc độ dĩ nhiên là kém hơn cách viết trên một chút. Đơn giản các bạn chỉ cần thêm một dòng code này vào và loại bỏ tất cả các command Insert, Update, Delete. Ví dụ Update: các bạn sẽ thấy quá trình sẽ đơn giản đi rất nhiều Mã: Chọn tất cả 1. Dim MiAnLien As New OleDbCommandBuilder(da) ' Nó ở đây nè sẽ làm giúp ta làm mọi việc 2. 'Get Record can update trong Table 3. Dim row As DataRow = dt.Select("STT = " & Convert.ToInt32(txtSTT.Text))(0) 4. 'Update row 5. row.BeginEdit() 6. row("Name") = txtName.Text 7. row("Address") = txtAddress.Text 8. row("Phone") = txtPhone.Text 9. row("Email") = txtEmail.Text 10. row.EndEdit()
  9. 11. ‘Update dữ liệu 12. da.Update(dt) 13. - Insert, Delete thì cũng tương tự thôi, các bạn hãy tự làm. 12. Gọi thực thi một Query có sẵn trong file Access - Ví dụ bạn mở file access của bạn ra click vào Tab Queries và viết một Query tên là QuerySelect (xin nhắc lại query này ở trong file access ko phải ta viết ở trong chương trình) Mã: Chọn tất cả 1. SELECT * 2. FROM DanhsachSV 3. WHERE STT>[@STT]; 4. - Bạn đang thắc mắc là làm sao ta có thể gọi thực thi query này từ chương trình và nhận kết quả trả về từ nó, cũng như làm sao nạp giá trị cho tham số @STT trong query trên - Để làm điều này thật đơn giản, ta dùng command mà thôi Mã: Chọn tất cả 1. Private Sub btnQuery_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnQuery.Click 2. Dim command As New OleDbCommand() 3. command.Connection = con 4. command.CommandType = CommandType.StoredProcedure ' Xác định ta đang gọi query trong file access command.CommandText = "QuerySelect" 'Tên của Query 5. 6. command.Parameters.Add("@STT", OleDbType.Numeric).Value = 5 'Nạp giá trị cho tham số @STT 'Nạp command trên vào DataAdapter tùy theo dạng 7. của command là Select, insert, update hay delete 8. da.SelectCommand = command dt.Clear() 'Xóa dữ liệu cũ 9. 10. da.Fill(dt) 11. DataGridView1.DataSource = dt 12. End Sub 13. s
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2