ADO.NET 連線
ADO.NET Connections 是從 C#應用程式連線到資料庫的最簡單方法之一。它們依賴於使用提供程式和指向資料庫的連線字串來執行查詢。
通用資料提供程式類
以下許多類是常用於查詢資料庫及其相關名稱空間的類:
SqlConnection
,SqlCommand
,SqlDataReader
來自System.Data.SqlClient
- 來自 tihuan 的
OleDbConnection
,OleDbCommand
,OleDbDataReader
- 來自 tihuan 的
MySqlConnection
,MySqlCommand
,MySqlDbDataReader
所有這些通常用於通過 C#訪問資料,並且在構建以資料為中心的應用程式中通常會遇到這些資料。未提及實現相同 FooConnection
,FooCommand
,FooDataReader
類的許多其他類可以表現出相同的行為。
ADO.NET 連線的通用訪問模式
通過 ADO.NET 連線訪問資料時可以使用的常見模式可能如下所示:
// This scopes the connection (your specific class may vary)
using(var connection = new SqlConnection("{your-connection-string}")
{
// Build your query
var query = "SELECT * FROM YourTable WHERE Property = @property");
// Scope your command to execute
using(var command = new SqlCommand(query, connection))
{
// Open your connection
connection.Open();
// Add your parameters here if necessary
// Execute your query as a reader (again scoped with a using statement)
using(var reader = command.ExecuteReader())
{
// Iterate through your results here
}
}
}
或者,如果你只是執行簡單更新而不需要閱讀器,則適用相同的基本概念:
using(var connection = new SqlConnection("{your-connection-string}"))
{
var query = "UPDATE YourTable SET Property = Value WHERE Foo = @foo";
using(var command = new SqlCommand(query,connection))
{
connection.Open();
// Add parameters here
// Perform your update
command.ExecuteNonQuery();
}
}
你甚至可以針對一組通用介面進行程式設計,而不必擔心提供者特定的類。ADO.NET 提供的核心介面是:
- IDbConnection - 用於管理資料庫連線
- IDbCommand - 用於執行 SQL 命令
- IDbTransaction - 用於管理事務
- IDataReader - 用於讀取命令返回的資料
- IDataAdapter - 用於將資料傳入和傳出資料集
var connectionString = "{your-connection-string}";
var providerName = "{System.Data.SqlClient}"; //for Oracle use "Oracle.ManagedDataAccess.Client"
//most likely you will get the above two from ConnectionStringSettings object
var factory = DbProviderFactories.GetFactory(providerName);
using(var connection = new factory.CreateConnection()) {
connection.ConnectionString = connectionString;
connection.Open();
using(var command = new connection.CreateCommand()) {
command.CommandText = "{sql-query}"; //this needs to be tailored for each database system
using(var reader = command.ExecuteReader()) {
while(reader.Read()) {
...
}
}
}
}