本文列出了 Microsoft.Data.SqlClient 接受的所有 連接字串 關鍵字。 每個關鍵字也都有一個相符 SqlConnectionStringBuilder 的屬性。 關於入門介紹、常見模式與解析規則,請參見 連接字串。
關鍵字和別名並不區分大小寫。 當你透過建商物業設定價值時,建商會在 關鍵字 欄中寫入該標準關鍵字。
用 SqlConnectionStringBuilder 設定選項
從一個包含伺服器、資料庫和認證設定的基礎 連接字串 開始。 然後透過建構者屬性設定特定工作負載的選項。 .NET Framework 分頁使用了 C# 7.3。 若要建立執行樣本的專案,請參閱 「建立專案」。
using Microsoft.Data.SqlClient;
string connectionString =
Environment.GetEnvironmentVariable("SQL_CONNECTION_STRING")
?? throw new InvalidOperationException(
"Set the SQL_CONNECTION_STRING environment variable.");
var builder = new SqlConnectionStringBuilder(connectionString)
{
ApplicationName = "Orders.Worker",
ConnectTimeout = 30,
CommandTimeout = 60,
MaxPoolSize = 50,
};
await using var connection = new SqlConnection(builder.ConnectionString);
await connection.OpenAsync();
await using var command = new SqlCommand("SELECT APP_NAME();", connection);
Console.WriteLine($"APP_NAME(): {await command.ExecuteScalarAsync()}");
Console.WriteLine($"Connection timeout: {connection.ConnectionTimeout}");
Console.WriteLine($"Command timeout: {command.CommandTimeout}");
輸出為:
APP_NAME(): Orders.Worker
Connection timeout: 30
Command timeout: 60
新連線 SqlCommand 的預設逾時是取 Command Timeout 自其連線關鍵字。
檢查預設值
新一個選項 SqlConnectionStringBuilder 的預設值會被報告。 此程式會列印大多數應用程式會審查的預設值:
using Microsoft.Data.SqlClient;
var defaults = new SqlConnectionStringBuilder();
Console.WriteLine($"Connect Timeout: {defaults.ConnectTimeout}");
Console.WriteLine($"Command Timeout: {defaults.CommandTimeout}");
Console.WriteLine($"Connect Retry Count: {defaults.ConnectRetryCount}");
Console.WriteLine($"Connect Retry Interval: {defaults.ConnectRetryInterval}");
Console.WriteLine($"Encrypt: {defaults.Encrypt}");
Console.WriteLine($"Trust Server Certificate: {defaults.TrustServerCertificate}");
Console.WriteLine($"Pooling: {defaults.Pooling}");
Console.WriteLine($"Min Pool Size: {defaults.MinPoolSize}");
Console.WriteLine($"Max Pool Size: {defaults.MaxPoolSize}");
Console.WriteLine($"Connection Idle Timeout: {defaults.IdleTimeout}");
Console.WriteLine($"Load Balance Timeout: {defaults.LoadBalanceTimeout}");
Console.WriteLine($"Packet Size: {defaults.PacketSize}");
Console.WriteLine($"Multi Subnet Failover: {defaults.MultiSubnetFailover}");
Console.WriteLine($"IP Address Preference: {defaults.IPAddressPreference}");
Console.WriteLine($"Pool Blocking Period: {defaults.PoolBlockingPeriod}");
Console.WriteLine($"Application Intent: {defaults.ApplicationIntent}");
Console.WriteLine($"Application Name: {defaults.ApplicationName}");
Console.WriteLine($"Type System Version: {defaults.TypeSystemVersion}");
Console.WriteLine($"Transaction Binding: {defaults.TransactionBinding}");
在 .NET 上,輸出為:
Connect Timeout: 15
Command Timeout: 30
Connect Retry Count: 1
Connect Retry Interval: 10
Encrypt: True
Trust Server Certificate: False
Pooling: True
Min Pool Size: 0
Max Pool Size: 100
Connection Idle Timeout: 300
Load Balance Timeout: 0
Packet Size: 8000
Multi Subnet Failover: False
IP Address Preference: IPv4First
Pool Blocking Period: Auto
Application Intent: ReadWrite
Application Name: Core Microsoft SqlClient Data Provider
Type System Version: Latest
Transaction Binding: Implicit Unbind
Encrypt: True 這是選項 Mandatory 。 在 .NET Framework 中,預設應用程式名稱為 Framework Microsoft SqlClient Data Provider。
伺服器與資料庫選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Data Source |
Server、Address、Addr、Network Address |
DataSource |
空的 | 要連接的伺服器。 接受主機名稱、host,port、(localdb)\instancehost\instance及或tcp:np:協定前綴。 關於接受的表單,請參見 「指定伺服器與資料庫」。 |
Initial Catalog |
Database |
InitialCatalog |
空的 | 登入後使用的資料庫。 當帳號是空的,伺服器會使用登入的預設資料庫。 |
AttachDbFilename |
Extended Properties,Initial File Name |
AttachDBFilename |
空的 | 主要資料庫檔案的完整路徑,用於 SQL Server Express 與 LocalDB。 |
User Instance |
None | UserInstance |
false |
將連線導向至 SQL Server Express 使用者實例。 欲了解更多資訊,請參閱 SQL Server Express 使用者實例。 |
Failover Partner |
FailoverPartner |
FailoverPartner |
空的 | 當主要伺服器無法使用時,資料庫鏡像夥伴會嘗試。 資料庫鏡像已被淘汰。 新部署時使用可用性群組。 |
Current Language |
Language |
CurrentLanguage |
空的 | 會話的 SQL Server 語言名稱,例如 us_english。 控制日期格式與系統訊息語言。 |
應用程式身份選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Application Name |
App |
ApplicationName |
Core Microsoft SqlClient Data Provider |
伺服器透過會話視圖及會話檢視時回報 APP_NAME() 的名稱。 每個部署的工作負載都用一個穩定名稱。 不同的數值會產生不同的連結池。 |
Workstation ID |
WorkstationID,WSID |
WorkstationID |
本地電腦名稱 | 伺服器透過 S 回報 HOST_NAME()的用戶端電腦名稱。 |
Application Intent |
ApplicationIntent |
ApplicationIntent |
ReadWrite |
ReadOnly 當目標支援時請求讀取意圖路由。 它不會讓語句變成唯讀。 欲了解更多資訊,請參閱 高可用性與災難復原。 |
要報告是哪個框架或工具開啟了連線,請使用該 RegisteredApplication 屬性。 它沒有 連接字串 關鍵字。 欲了解更多資訊,請參閱 「報告應用程式身份」。
驗證選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Authentication |
None | Authentication |
未具體說明 | 驗證方法。 關於被接受的數值,請參見下表。 |
Integrated Security |
Trusted_Connection |
IntegratedSecurity |
false |
true, , yes, sspi 或使用當前程序的身份。 |
User ID |
UID,User |
UserID |
空的 | SQL 登入名稱,或 Microsoft Entra ID 的使用者或用戶端識別碼,視 Authentication. |
Password |
PWD |
Password |
空的 | 密碼或用戶端秘密,適用於接受密碼的方法。 |
Persist Security Info |
PersistSecurityInfo |
PersistSecurityInfo |
false |
當 false時,驅動程式會在連線開啟後移除密碼 SqlConnection.ConnectionString 。 算了 false。 |
Server SPN |
ServerSPN |
ServerSPN |
源自伺服器名稱 | 覆寫用於對主要伺服器進行整合式驗證的服務主體名稱(SPN)。 |
Failover Partner SPN |
FailoverPartnerSPN |
FailoverPartnerSPN |
源自合作夥伴名稱 | 覆蓋用於整合驗證的 SPN 給故障轉移夥伴。 |
Authentication 接受這些價值觀。 建構者會寫出不加空格的 ,例如 ActiveDirectoryDefault,而解析器接受這兩種形式。
| Value | Identity |
|---|---|
Sql Password |
一個帶有 User IDPassword和 的 SQL 登入。 |
Active Directory Default |
一連串憑證來源,例如環境變數、管理身份及開發者工具登入。 |
Active Directory Managed Identity |
一個受管理身份。 設定 User ID 為使用者指派身份的客戶端 ID。
Active Directory MSI 是個化名。 |
Active Directory Workload Identity |
一個 Kubernetes 工作負載身份。 |
Active Directory Service Principal |
一個應用程式設定 User ID 為客戶端 ID,並 Password 設定為客戶端秘密。 |
Active Directory Interactive |
一位透過瀏覽器提示登入的使用者。 |
Active Directory Device Code Flow |
使用者用代碼在另一台裝置登入。 |
Active Directory Integrated |
登入的 Windows 使用者,透過聯邦或無縫的單一登入配置。 |
Active Directory Password |
用戶名稱和密碼。 這個方法已過時。 用其他方法。 |
Microsoft Entra ID 的方法需要這個Microsoft.Data.SqlClient.Extensions.Azure套件。 關於設定與範例,請參見 Microsoft Entra ID 認證與 SQL Server 認證。
加密選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Encrypt |
None | Encrypt |
Mandatory |
Strict 使用 TDS 8.0,並且總是驗證伺服器憑證。
Mandatory, , true或 yes 是加密連線。
Optional, , false, no 或僅在伺服器需要時加密整個連線。 當伺服器支援加密但不強制時,只有登入封包會被加密。 |
Trust Server Certificate |
TrustServerCertificate |
TrustServerCertificate |
false |
true 跳過伺服器憑證驗證。 當 Encrypt=Strict 時會被忽略。 不要在生產環境中使用它。 |
Host Name In Certificate |
HostNameInCertificate |
HostNameInCertificate |
空的 | 憑證驗證的備用名稱。 SqlClient 首先會根據伺服器名稱 Data Source驗證憑證。 它只會在名稱不匹配時檢查 Host Name In Certificate ,所以當伺服器名稱已經匹配時,錯誤的值不會導致失敗。 它不會綁定憑證。 若要要求特定憑證,請使用 Server Certificate。 它不會改變網路目的地,也不會繞過信任鏈和到期檢查。 當伺服器名稱已經和證書相符時,保持不設定。 |
Server Certificate |
ServerCertificate |
ServerCertificate |
空的 | PEM、DER或CER檔案的路徑必須與伺服器憑證完全吻合。 司機只有在驗證憑證時才會檢查匹配,因此使用與 或 Encrypt=StrictTrust Server Certificate=false和 的符號。Encrypt=Mandatory 匹配檔案取代了鏈名和主機名稱驗證,因此它能使用客戶端不信任的自簽憑證。 |
完整驗證規則請參見 加密與憑證驗證。
永遠加密選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Column Encryption Setting |
ColumnEncryption |
ColumnEncryptionSetting |
Disabled |
Enabled 開啟連線時的「始終加密」。 |
Attestation Protocol |
None | AttestationProtocol |
未具體說明 | 飛地認證協議: AAS、、 HGS或 None。 |
Enclave Attestation Url |
None | EnclaveAttestationUrl |
空的 | Always Encrypted with secure enclaves 的認證服務端點。 |
網路選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Multi Subnet Failover |
MultiSubnetFailover |
MultiSubnetFailover |
false |
嘗試平行處理伺服器名稱解析的所有 IP 位址。 它用於可用性群組監聽器和透過 TCP 連線的故障轉移叢集實例。 資料庫鏡像不支援。 命名實例依據網路實作而定。 受管理實作(.NET 在 Linux 和 macOS 以及 Windows 上啟用管理網路時)支援命名實例,並會平行地將 SQL Server 瀏覽器請求傳送到每個已解析的位址。 Windows 的原生實作可以拒絕帶有 SNI 錯誤 48 的命名實例。 |
IP Address Preference |
IPAddressPreference |
IPAddressPreference |
IPv4First |
嘗試解析位址的順序為: IPv4First、、 IPv6First或 UsePlatformDefault。 |
Packet Size |
PacketSize |
PacketSize |
8000 |
表格資料串流(TDS)封包大小(位元組)從 512 到 32,768。 |
一個全程序的 AppContext 開關可以將預設值 Multi Subnet Failover 改為 true。 欲了解更多資訊,請參閱 SqlClient 中的 AppContext 切換。
暫停選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Connect Timeout |
Connection Timeout、ConnectTimeout、Timeout |
ConnectTimeout |
15 |
等待連線的時間是幾秒鐘,包括當連線池滿時等待池連線的時間。
0 無限期等待。 |
Command Timeout |
None | CommandTimeout |
30 |
連線上產生的指令預設 CommandTimeout 秒數。
0 無限期等待。 |
Connect Timeout 不會限制查詢的執行。
Command Timeout 這不會限制登入或等待共用連線的時間。 將 A CancellationToken 傳給非同步通話,讓呼叫者能在任一逾時前停止等待。
連線恢復選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Connect Retry Count |
ConnectRetryCount |
ConnectRetryCount |
1 |
在第一次開放時發生排位短暫故障後,以及恢復故障怠速連線時的重試。
0 關閉重試。 有效值為 0 到 255。 |
Connect Retry Interval |
ConnectRetryInterval |
ConnectRetryInterval |
10 |
重試之間的間隔。 有效數值為1到60。 |
當 Connect Retry Count 是 1,這是預設值,驅動程式會用來處理 Azure SQL 端點,而5對於 Azure Synapse Analytics 的無伺服器 SQL 池端點,當它恢復壞掉的閒置連線時。2 第一次開啟會使用設定值,因此預設允許每個端點重試一次。 驅動程式在兩種情況下都使用設定的其他值。
這些關鍵字不會重新執行在執行期間失敗的指令。 若要跳過一個開啟的內建重試,請呼叫 Open 一個帶有 OpenWithoutRetry的超載。 關於自訂政策,請參見 可配置重試邏輯。 只有在安全重複指令時才重試。
池化選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Pooling |
None | Pooling |
true |
重用實體連線以匹配連接串。 |
Min Pool Size |
None | MinPoolSize |
0 |
池建立後仍保持開啟的實體連線。 |
Max Pool Size |
None | MaxPoolSize |
100 |
最多實體連線集中在同一池子裡。 必須至少為 1。 |
Connection Idle Timeout |
None | IdleTimeout |
300 |
連線可以在池子關閉前保持閒置的秒數。
0 關閉怠速過期。 只有當 Switch.Microsoft.Data.SqlClient.UseLegacyIdleTimeoutBehavior AppContext 開關為 false時才會強制執行。 預設為true。 |
Load Balance Timeout |
Connection Lifetime |
LoadBalanceTimeout |
0 |
連線後的最大年齡(秒數)會回到池中。 一個較舊的連線已關閉。
0 關閉限制。 |
Pool Blocking Period |
PoolBlockingPeriod |
PoolBlockingPeriod |
Auto |
是否池會短暫重拋快取登入失敗: Auto、、 AlwaysBlock或 NeverBlock。
Auto關閉 Azure SQL 端點的阻擋。 |
每個不同的 連接字串 都有自己的 pool 。 關於池金鑰、清除與閒置時間,請參見 SQL Server 連線池。
交易與會話選項
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Enlist |
None | Enlist |
true |
當交易開啟時,會將連線列入環境 System.Transactions 交易中。 |
Transaction Binding |
None | TransactionBinding |
Implicit Unbind |
Implicit Unbind 當入伍交易結束時,該連線會被斷開。
Explicit Unbind 保持連接狀態直到連線關閉或程式碼將其分離。 |
Multiple Active Result Sets |
MultipleActiveResultSets |
MultipleActiveResultSets |
false |
允許在同一條連線上同時有多個活躍批次。 |
Type System Version |
None | TypeSystemVersion |
Latest |
驅動程式所暴露的伺服器型系統。 接受 Latest、 SQL Server 2012、 SQL Server 2008和 SQL Server 2005。 請留在 Latest。 |
Replication |
None | Replication |
false |
將連線識別為複寫連線。 |
僅限 .NET Framework 的選項
這些關鍵字僅在 .NET Framework 上被接受。 在 .NET 上,建造者不斷NotSupportedExceptionSqlConnectionArgumentException拋出 。
| Keyword | Aliases | 建商財產 | 預設 | 描述 |
|---|---|---|---|---|
Network Library |
Net,Network |
NetworkLibrary |
空的 | 網路圖書館。 不要把它和 a tcp: 或 np: 前綴 Data Source合併,因為連線會失敗。 在 .NET 上,前Data Source綴要用 tcp: 或 np: 取代。 |
Connection Reset |
None | ConnectionReset |
true |
Obsolete. |
Transparent Network IP Resolution |
TransparentNetworkIPResolution |
TransparentNetworkIPResolution |
true |
Obsolete. |
不支援關鍵字
| Keyword | Result |
|---|---|
Context Connection |
Context Connection=true 投擲 InvalidOperationException。 Microsoft。Data.SqlClient 不支援 SQL CLR 上下文連線。 |
Asynchronous Processing |
拋出 ArgumentException: Keyword not supported。 非同步方法則不需要它也能運作。 |
Driver,Provider |
拋出 ArgumentException: Keyword not supported。 這些關鍵字屬於 ODBC 和 OLE DB。 |
驗證規則
SqlConnectionStringBuilder 當你設定時,會拒絕未知關鍵字和許多無效值。
SqlConnection當你設定它的 連接字串 時,會進行更多檢查,包括建構者接受的單一值和關鍵字組合。 建商接受的線條在建立連接時仍可能失效。
建構者與連接拒絕這些值,當 :ArgumentException
-
Connect Timeout,Command Timeout,Load Balance Timeout,Connection Idle Timeout, 或Min Pool Size小於 0。 -
Max Pool Size少於1。 -
Packet Size512 外,32,768。 -
Connect Retry Count從0到255。 -
Connect Retry Interval1至60區外側。 - 這個關鍵字這篇文章中沒有提到。
SqlConnection 也拒絕這些值, ArgumentException儘管建構者接受:
-
Type System Version除了Latest、SQL Server 2012、SQL Server 2008、 或SQL Server 2005之外。 -
Transaction Binding除了Implicit Unbind或Explicit Unbind之外。 - 一個比 、
Data SourcePasswordAttachDBFilenameCurrent LanguageWorkstation IDFailover PartnerUser IDInitial Catalog或 的 TDS 限制Application Name更長的值。
SqlConnection也拒絕這些組合,且:ArgumentException
-
Min Pool Size大於Max Pool Size。 -
Failover Partner沒有Initial Catalog。 -
Failover Partner搭配Multi Subnet Failover=true、User Instance=true或Application Intent=ReadOnly。 -
Authentication與Integrated Security=true。 -
Password其中Active Directory Integrated、Active Directory Interactive、Active Directory Managed Identity、Active Directory MSI、Active Directory Default或Active Directory Workload Identity。 -
User ID或Password。Active Directory Device Code Flow
審查選項變更
在你更改生產選項之前:
- 記錄目前的 連接字串、驅動程式版本、端點類型,以及你要解決的問題。
- 一次只改變一個選項。
- 測試連線建立、認證、憑證驗證、池化、故障轉移、取消及查詢執行。
- 測量連線延遲、池等待時間和錯誤數字。
- 在每個部署的實例上確認設定。
變更的 連接字串 會建立一個新的 pool 。 在分階段部署期間,舊池與新池會同時存在,因此伺服器的實體連線總數可能會增加。