SqlConnection 類別

定義

表示對 SQL Server 資料庫的連線。 此類別無法獲得繼承。

public ref class SqlConnection sealed : System::Data::Common::DbConnection, ICloneable
public sealed class SqlConnection : System.Data.Common.DbConnection, ICloneable
type SqlConnection = class
    inherit DbConnection
    interface ICloneable
Public NotInheritable Class SqlConnection
Inherits DbConnection
Implements ICloneable
繼承
SqlConnection
實作

範例

下列範例會 SqlCommand 建立 和 SqlConnectionSqlConnection會開啟 ,並將 設定為 ConnectionSqlCommand。 然後範例會呼叫 ExecuteNonQuery。 若要達成此目的,會ExecuteNonQuery傳遞 連接字串 和 Transact-SQL INSERT 語句的查詢字串。 當程式代碼結束 using 區塊時,會自動關閉連線。

using System;
using System.Data;
using Microsoft.Data.SqlClient;

namespace SqlCommandCS
{
    class Program
    {
        static void Main()
        {
            string str = "Data Source=(local);Initial Catalog=Northwind;"
                + "Integrated Security=SSPI";
            string qs = "SELECT OrderID, CustomerID FROM dbo.Orders;";
            CreateCommand(qs, str);
        }
        private static void CreateCommand(string queryString,
            string connectionString)
        {
            using (SqlConnection connection = new SqlConnection(
                       connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Connection.Open();
                command.ExecuteNonQuery();
            }
        }
    }
}

備註

SqlConnection物件代表 SQL Server 數據源的唯一會話。 使用用戶端/伺服器資料庫系統時,相當於與伺服器的網路連線。 SqlConnection與 搭配SqlDataAdapter使用 ,SqlCommand以在連線到 Microsoft SQL Server 資料庫時提升效能。 針對所有第三方 SQL Server 產品和其他 OLE DB 支援的數據來源,請使用 OleDbConnection

當您建立的 SqlConnection實例時,所有屬性都會設定為其初始值。 如需這些值的清單,請參閱建 SqlConnection 構函式。

如需 連接字串 中的關鍵字清單,請參閱 ConnectionString

SqlConnection如果超出範圍,則不會關閉。 因此,您必須呼叫 CloseDispose來明確關閉連線。 CloseDispose 在功能上相等。 如果連線共享值 Pooling 設定 true 為 或 yes,基礎連接會傳回至連接集區。 另一方面,如果 Pooling 設定為 falseno,則實際關閉與伺服器的基礎連線。

注意

從連接集區中擷取連接或將連接傳回連接集區時,系統不會在伺服器上引發登入和登出事件,因為當連接傳回連接集區時,連接實際上並未關閉。 如需詳細資訊,請參閱 SQL Server 連線共用 (ADO.NET) \(機器翻譯\)。

若要確保一律關閉連線,請在 區塊內 using 開啟連線,如下列代碼段所示。 這麼做可確保當程式代碼結束區塊時,會自動關閉連線。

Using connection As New SqlConnection(connectionString)  
    connection.Open()  
    ' Do work here; connection closed on following line.  
End Using  
using (SqlConnection connection = new SqlConnection(connectionString))  
    {  
        connection.Open();  
        // Do work here; connection closed on following line.  
    }  

注意

若要部署高效能應用程式,您必須使用連線共用。 當您使用 .NET Framework Data Provider for SQL Server 時,您不需要啟用連線共用,因為提供者會自動管理此設定,不過您可以修改某些設定。 如需詳細資訊,請參閱 SQL Server 連線共用 (ADO.NET) \(機器翻譯\)。

SqlException如果 由執行SqlCommand的 方法產生 ,當嚴重性層級為19或更少時,仍SqlConnection會保持開啟狀態。 當嚴重性層級為 20 或更新時,伺服器通常會關閉 SqlConnection。 但是,使用者可以再次開啟連線,然後繼續進行。

建立 物件實例 SqlConnection 的應用程式,可以藉由設定宣告式或命令式安全性需求,要求所有直接和間接呼叫者擁有足夠的程式碼許可權。 SqlConnection 使用物件提出安全性需求 SqlClientPermission 。 用戶可以使用 對象來確認其程式代碼具有足夠的許可權 SqlClientPermissionAttribute 。 用戶和系統管理員也可以使用 Caspol.exe (代碼啟用安全策略工具) 修改計算機、使用者和企業層級的安全策略。 如需詳細資訊,請參閱 .NET 的安全性。 如需示範如何使用安全性需求的範例,請參閱代碼啟用安全性和 ADO.NET

如需從伺服器處理警告和參考訊息的詳細資訊,請參閱 連線事件。 如需 SQL Server 引擎錯誤和錯誤訊息的詳細資訊,請參閱 Database Engine 事件和錯誤

警告

您可以強制 TCP 而非共享記憶體。 您可以藉由將 tcp: 前置詞到 連接字串 中的伺服器名稱,或使用localhost來執行此動作。

建構函式

SqlConnection()

初始化 SqlConnection 類別的新執行個體。

SqlConnection(String)

指定包含連接字串的字串時,初始化 SqlConnection 類別的新執行個體。

SqlConnection(String, SqlCredential)

指定不使用 Integrated Security = true 和包含使用者 ID 和密碼之 SqlCredential 物件的連接字串,初始化 SqlConnection 類別的新執行個體。

屬性

AccessToken

取得或設定此連接的存取權杖。

AccessTokenCallback

取得或設定連線的存取令牌回呼。

CanCreateBatch

取得值,指出這個 SqlConnection 執行個體是否支援 DbBatch 類別。

ClientConnectionId

最近連線的連線 ID,無論連線是否成功。

ColumnEncryptionKeyCacheTtl

針對 Always Encrypted 功能,取得或設定資料行加密金鑰快取中資料行加密金鑰項目的存留時間。 預設值是 2 小時。 0 表示完全沒有快取。

ColumnEncryptionQueryMetadataCacheEnabled

取得或設定值,指出是否要針對根據已啟用 Always Encrypted 的資料庫執行的參數化查詢,啟用 (true) 或停用 (false) 查詢中繼資料快取。 預設值為 true。

ColumnEncryptionTrustedMasterKeyPaths

可讓您為資料庫伺服器設定受信任的金鑰路徑清單。 如果在處理應用程式查詢時,驅動程式收到的機碼路徑不在清單上,查詢就會失敗。 此屬性會針對受到安全性攻擊危害的 SQL Server 提供額外的保護,此類 SQL Server 會提供假的金鑰路徑,而可能會導致遺漏金鑰存放區認證。

CommandTimeout

取得在終止執行命令併產生錯誤之前,) 以秒為單位的預設等候時間 (。 預設值為 30 秒。

ConnectionString

取得或設定用來開啟 SQL Server 資料庫的字串。

ConnectionTimeout

取得在終止嘗試並產生錯誤前嘗試建立連接的等待時間。

Credential

取得或設定這個連接的 SqlCredential 物件。

Database

取得目前資料庫或要在連接開啟之後使用的資料庫名稱。

DataSource

取得要連線的 SQL Server 執行個體名稱。

FireInfoMessageEventOnUserErrors

取得或設定 FireInfoMessageEventOnUserErrors 屬性。

PacketSize

取得用來與 SQL Server 執行個體通訊的網路封包大小 (位元組)。

RetryLogicProvider

取得或設定值,其指定繫結至這個命令的 SqlRetryLogicBaseProvider 物件。

ServerProcessId

取得使用中連線的伺服器進程標識碼 (SPID) 。

ServerVersion

取得字串,其中包含用戶端連線的 SQL Server 執行個體版本。

State

指出在連接上執行最近一次網路作業期間的 SqlConnection 狀態。

StatisticsEnabled

設定為 true 時,啟用目前連接的統計資料蒐集。

WorkstationId

取得識別資料庫用戶端的字串。

方法

BeginTransaction()

開始資料庫交易。

BeginTransaction(IsolationLevel)

使用指定的隔離等級開始資料庫異動。

BeginTransaction(IsolationLevel, String)

使用指定的隔離等級和交易名稱開始資料庫交易。

BeginTransaction(String)

使用指定的異動名稱開始資料庫異動。

ChangeDatabase(String)

為開啟的 SqlConnection 變更目前的資料庫。

ChangePassword(String, SqlCredential, SecureString)

變更 SqlCredential 物件中指定的使用者 SQL Server 密碼。

ChangePassword(String, String)

將連接字串中指示的使用者 SQL Server 密碼變更成提供的新密碼。

ClearAllPools()

清空連接集區。

ClearPool(SqlConnection)

清空與特定連接關聯的連接集區。

Close()

關閉與資料庫的連接。 這是關閉任何開啟連接的慣用方法。

CreateCommand()

建立並傳回與 SqlConnection 關聯的 SqlCommand 物件。

EnlistDistributedTransaction(ITransaction)

將指定的異動登記為分散式異動。

EnlistTransaction(Transaction)

將指定的異動登記為分散式異動。

GetSchema()

傳回這個 SqlConnection 之資料來源的結構描述資訊。 如需結構描述的詳細資訊,請參閱 SQL Server 結構描述集合

GetSchema(String)

使用結構描述名稱的特定字串,傳回這個 SqlConnection 之資料來源的結構描述資訊。

GetSchema(String, String[])

使用結構描述名稱的特定字串和限制值的特定字串陣列,傳回這個 SqlConnection 的資料來源的結構描述資訊。

Open()

使用 ConnectionString 所指定的屬性設定,開啟資料庫連接。

Open(SqlConnectionOverrides)

使用 ConnectionString 所指定的屬性設定,開啟資料庫連接。

OpenAsync(CancellationToken)

非同步版本的 Open(),這個版本會透過 ConnectionString 所指定的屬性設定開啟資料庫連接。 取消語彙基元可用於要求在連線逾時之前捨棄作業。 例外狀況將經由傳回的工作傳播。 如果超過連接逾時期限而未順利連線,傳回的工作會標示為失敗並發生例外狀況。 實作會傳回一項工作,而不需針對集區和非集區的連接封鎖呼叫的執行緒。

RegisterColumnEncryptionKeyStoreProviders(IDictionary<String,SqlColumnEncryptionKeyStoreProvider>)

註冊資料行加密金鑰存放區提供者。 此函式應該只在應用程式中呼叫一次。 這會進行字典的淺層複製,讓應用程式在設定自定義提供者清單之後無法改變。

Windows 憑證存放區、CNG Store 和 CSP 可用的內建資料行主要金鑰存放區提供者會預先註冊。

RegisterColumnEncryptionKeyStoreProvidersOnConnection(IDictionary<String,SqlColumnEncryptionKeyStoreProvider>)

在實例上 SqlConnection 註冊加密金鑰存放區提供者。 如果已呼叫此函式,則會忽略使用靜態 RegisterColumnEncryptionKeyStoreProviders(IDictionary<String,SqlColumnEncryptionKeyStoreProvider>) 方法註冊的任何提供者。 這個函式可以多次呼叫。 這會進行字典的淺層複製,讓應用程式在設定自定義提供者清單之後無法改變。

ResetStatistics()

如果啟用統計資料蒐集,則所有值都會重設為零。

RetrieveInternalInfo()

傳回呼叫 方法時的內部屬性名稱值組集合。

RetrieveStatistics()

呼叫方法時,傳回統計資料的名稱值配對集合。

事件

InfoMessage

發生於 SQL Server 傳回警告或告知性訊息時。

明確介面實作

ICloneable.Clone()

建立目前執行個體複本的新物件。

適用於