Lưu ý: Câu trả lời này có liên quan nếu bạn quyết định sử dụng chức năng ADO.NET 2 cơ bản thay vì ORM (chẳng hạn như Entity Framework hoặc NHibernate) hoặc LINQ to SQL.
Giả sử bạn đã xác định một chuỗi kết nối trong app.config
của mình :
<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Lưu ý sự hiện diện của providerName
thuộc tính và giá trị của nó. Bạn cũng có thể đặt một giá trị cho nhà cung cấp DB khác, ví dụ:System.Data.SQLite
.
(Lưu ý rằng các nhà cung cấp không chuẩn, tức là những nhà cung cấp không có trong .NET Framework theo mặc định, cần phải được đăng ký trước, trong app.config
hoặc trong machine.config
của máy khách .)
Bây giờ, bạn có thể làm việc với cơ sở dữ liệu được chỉ định theo kiểu nhà cung cấp hoàn toàn bất khả tri như sau:
using System.Configuration; // for ConfigurationManager
using System.Data; // for all interface types
using System.Data.Common; // for DbProviderFactories
var cs = ConfigurationManager.ConnectionStrings["SomeConnection"];
// ^^^^^^^^^^^^^^^^
var factory = DbProviderFactories.GetFactory(cs.ProviderName);
// ^^^^^^^^^^^^^^^
using (IDbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = cs.ConnectionString;
// ^^^^^^^^^^^^^^^^^^^
connection.Open();
try
{
using (IDbCommand command = connection.CreateCommand())
{
... // do something with the database
}
}
finally
{
connection.Close();
}
}
Lưu ý cách mã này chỉ hoạt động với các loại giao diện. Nơi duy nhất mà bạn chỉ ra một nhà cung cấp DB cụ thể là thông qua providerName
giá trị thuộc tính trong app.config
tập tin. (Tôi đã đánh dấu tất cả những nơi có cài đặt từ app.config
được lấy bằng ^^^
s.)
Đọc thêm:
-
Mã hóa chung với các lớp cơ sở và dữ liệu ADO.NET 2.0:
tương tự như câu trả lời của tôi, nhưng đi vào chi tiết hơn. -
Nhà cung cấp được quản lý ADO.NET và Trung tâm nhà phát triển DataSet:
bao gồm, trong số những thứ khác, chỉ mục các nhà cung cấp cơ sở dữ liệu ADO.NET có sẵn.