Thao tác với các loại CSDL thông qua DbProviderFactory

Các bài viết hướng dẫn về Visual Basic .NET và C#

Các điều hành viên: tungcan5diop, QUANITGROBEST

Đăng trả lời
Hình đại diện của thành viên
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: Chủ nhật 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Tiếp xúc:

Thao tác với các loại CSDL thông qua DbProviderFactory

Gửi bài by vuathongtin »

Tên bài viết: Thao tác với các loại CSDL thông qua DbProviderFactory
Tác giả: vuathongtin
Cấp độ bài viết: Dành cho người am hiểu về ADO.NET
Bạn có thể dễ dàng thao tác với tất cả các loại CSDL như Access, SQl Server, Mysql, Sqlite,... mà không phải sửa lại cấu trúc của các Provider. Đơn giản chỉ cần sử dụng DbProviderFactory (chứa trong thư viện System.Data.Common)

1. Thư viện :
Vb.NET :
  1. Imports System.Data.Common
  2. Imports System.Data.OleDb 'Nếu CSDL là Access
  3. Imports System.Data.SqlClient 'Nếu CSDL là SQL Server
  4. Imports MySql.Data.MySqlClient; 'Nếu CSDL là MySql
  5. Imports System.Data.SQLite; 'Nếu CSDL là Sqlite
  6.  

C# :
  1. using System.Data.Common;
  2. using MySql.Data.MySqlClient; //Nếu CSDL là MySql
  3. using System.Data.SqlClient; //Nếu CSDL là SQL Server
  4. using System.Data.SQLite;  //Nếu CSDL là Sqlite
  5. using System.Data.OleDb; //Nếu CSDL là Access


2. Khai báo biến toàn cục :

VB.NET
  1.     Dim F As DbProviderFactory = DbProviderFactories.GetFactory("thư viện của provider tương ứng")
  2.     Dim conn As DbConnection
  3.     Dim dt As New DataTable


C# :
  1. DbProviderFactory F = DbProviderFactories.GetFactory(<thư viện của provider tương ứng>);
  2. public DbConnection conn;
  3. DataTable dt;


Ví dụ : <thư viện của provider tương ứng>
Access : "System.Data.OleDb"
  1. Dim F As DbProviderFactory = DbProviderFactories.GetFactory("System.Data.OleDb")


SQL Server : "System.Data.SqlClient"
  1. Dim F As DbProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient")


SQlite : "System.Data.SQLite"
Mysql : "MySql.Data.MySqlClient"


3. Kết nối với CSDL :
VB.NET :
  1. Public Sub ketnoi()
  2.         conn = F.CreateConnection
  3.         If (conn.State = ConnectionState.Closed) Then
  4.             conn.ConnectionString = "<Chuỗi kết nối tương ứng của Provider>"
  5.             conn.Open()
  6.         End If
  7.     End Sub


C# :
  1. public void ketnoi()
  2.         {
  3.             conn = F.CreateConnection();
  4.             if (conn.State == ConnectionState.Closed)
  5.             {
  6.                 conn.ConnectionString = <Chuỗi kết nối tương ứng của Provider>;
  7.                 conn.Open();
  8.             }
  9.         }



Ví dụ :
Access :
VB.Net :
  1. conn.ConnectionString = "Provider = Microsoft.Jet.OleDb.4.0;Data Source=<tên CSDL>;User Id=;Password=";


SQL Server hoặc Mysql :
  1. conn.ConnectionString ="Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword"


Sqlite :
  1. conn.ConnectionString="Data Source=<đường dẫn đến file CSDL>"

Chú ý : Tham khảo http://www.connectionstrings.com/ để lấy chuỗi kết nối tương ứng

4. Truy xuất dữ liệu :

VB.NET :
  1. Public Function truyxuat_dt(ByVal sql As String) As DataTable
  2.         ketnoi()
  3.         dt = New DataTable
  4.         Dim da As DbDataAdapter = F.CreateDataAdapter
  5.         da.SelectCommand = F.CreateCommand
  6.         da.SelectCommand.CommandText = sql
  7.         da.SelectCommand.Connection = conn
  8.         da.Fill(dt)
  9.         Return dt
  10.     End Function


C# :
  1.  public DataTable truyxuat_dt(string sql)
  2.         {
  3.             ketnoi();
  4.             dt = new DataTable();
  5.             DbDataAdapter da=  F.CreateDataAdapter ();
  6.             da.SelectCommand = F.CreateCommand();
  7.             da.SelectCommand.CommandText = sql;
  8.             da.SelectCommand.Connection = conn;
  9.             da.Fill(dt);
  10.  
  11.             return dt;
  12.         }


5. Thực thi truy vấn (thêm, xóa, sửa)
//Cách đơn giản : thực thi đối với truy vấn được tạo từ phép nối chuỗi (Độ an toàn ko được cao)
VB.NET:
  1. Public Function thucthi_sql(ByVal sql As String)
  2.         ketnoi()
  3.         Dim cmd As DbCommand = F.CreateCommand
  4.         cmd.Connection = conn
  5.         cmd.CommandType = CommandType.Text
  6.         cmd.CommandText = sql
  7.         Return cmd.ExecuteNonQuery
  8.     End Function


C# :
  1.         public int thucthi_sql(string sql)
  2.         {
  3.             ketnoi();
  4.             DbCommand cmd = F.CreateCommand();
  5.             cmd.Connection = conn;
  6.             cmd.CommandType = CommandType.Text;
  7.             cmd.CommandText = sql;
  8.             return cmd.ExecuteNonQuery();
  9.         }



//Thực thi truy vấn được tạo thành từ cách truyền tham số (An toàn hơn)
Vb.NET:
  1. Public Function thucthi_para(ByVal sql As String, ByVal para As DbParameter())
  2.         ketnoi()
  3.         Dim cmd As DbCommand = F.CreateCommand
  4.         cmd.Connection = conn
  5.         cmd.CommandType = CommandType.Text
  6.         cmd.CommandText = sql
  7.  
  8.         If (para.Length <> 0) Then cmd.Parameters.AddRange(para)
  9.         Return cmd.ExecuteNonQuery()
  10.     End Function


C# :
  1. public int thucthi_para(string sql, DbParameter[] para)
  2.         {
  3.             ketnoi();
  4.             DbCommand cmd = F.CreateCommand();
  5.             cmd.Connection = conn;
  6.             cmd.CommandType = CommandType.Text;
  7.             cmd.CommandText = sql;
  8.  
  9.             if (para != null) cmd.Parameters.AddRange(para);
  10.             return cmd.ExecuteNonQuery();
  11.         }


6. Đánh giá sơ bộ :
Cấp độ bài viết : dành cho những bạn đã nắm được ADO.NET, nếu mới học thì chịu khó vào Box tài nguyên xem lại.
Ưu điểm : Linh hoạt trong việc thao tác với các loại CSDL
Nhược điểm : Vì thông qua lớp trung gian nên tốc độ truy xuất dữ liệu không được nhanh.
Bùi Thành Nhân
* Chuyên gia MMO
cachkiemtien.online
Đăng trả lời

Quay về