ADO.NET 連線

ADO.NET Connections 是從 C#應用程式連線到資料庫的最簡單方法之一。它們依賴於使用提供程式和指向資料庫的連線字串來執行查詢。

通用資料提供程式類

以下許多類是常用於查詢資料庫及其相關名稱空間的類:

  • SqlConnectionSqlCommandSqlDataReader 來自 System.Data.SqlClient
  • 來自 tihuan 的 OleDbConnectionOleDbCommandOleDbDataReader
  • 來自 tihuan 的 MySqlConnectionMySqlCommandMySqlDbDataReader

所有這些通常用於通過 C#訪問資料,並且在構建以資料為中心的應用程式中通常會遇到這些資料。未提及實現相同 FooConnectionFooCommandFooDataReader 類的許多其他類可以表現出相同的行為。

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()) {
                ...
            }
        }
    }
}