本文列出了Microsoft.所有的连接字符串关键字。Data.SqlClient 接受。 每个关键词也有一个匹配 SqlConnectionStringBuilder 的属性。 关于介绍、常见模式和解析规则,请参见 连接字符串。
关键词和别名不区分大小写。 当你通过建筑商物业设置价值时,建筑商会在 关键词 栏中写入规范关键词。
使用 SqlConnectionStringBuilder 设置选项
从一个包含服务器、数据库和认证设置的基础连接字符串开始。 然后通过建筑物属性设置工作负载特定的选项。 .NET 框架标签页使用 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 Microsoft SqlClient Data Provider。
服务器和数据库选项
| 关键 字 | Aliases | 建筑物业 | 默认 | 说明 |
|---|---|---|---|---|
Data Source |
Server、Address、Addr、Network Address |
DataSource |
空 | 连接服务器。 接受主机名、 host,port、 host\instance、 (localdb)\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。 控制日期格式和系统消息语言。 |
应用身份选项
| 关键 字 | Aliases | 建筑物业 | 默认 | 说明 |
|---|---|---|---|---|
Application Name |
App |
ApplicationName |
Core Microsoft SqlClient Data Provider |
服务器通过会话视图和报告 APP_NAME() 的名称。 每个部署的工作负载使用一个稳定名称。 不同的值会创造不同的连接池。 |
Workstation ID |
WorkstationID、WSID |
WorkstationID |
本地计算机名称 | 服务器通过 HOST_NAME()报告的客户端计算机名称。 |
Application Intent |
ApplicationIntent |
ApplicationIntent |
ReadWrite |
ReadOnly 当目标支持时请求读意图路由。 它不会让语句变成只读。 更多信息请参见 高可用性和灾难恢复。 |
要报告是哪个框架或工具打开了连接,请使用该 RegisteredApplication 属性。 它没有 连接字符串 关键字。 欲了解更多信息,请参见 报告应用身份。
身份验证选项
| 关键 字 | 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 ID 和 Password的 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 认证。
加密选项
| 关键 字 | 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=Mandatory 或 Encrypt=StrictTrust Server Certificate=false和 的匹配。 匹配文件取代了链名和主机名验证,因此它与客户端不信任的自签名证书工作。 |
完整的验证规则请参见 加密与证书验证。
始终加密选项
| 关键 字 | Aliases | 建筑物业 | 默认 | 说明 |
|---|---|---|---|---|
Column Encryption Setting |
ColumnEncryption |
ColumnEncryptionSetting |
Disabled |
Enabled 开启连接时的“始终加密”。 |
Attestation Protocol |
None | AttestationProtocol |
未指定 | 飞地认证协议: AAS, , HGS或 None。 |
Enclave Attestation Url |
None | EnclaveAttestationUrl |
空 | Always Encrypted 的安全隔区认证服务端点。 |
网络选项
| 关键 字 | 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 切换。
暂停选项
| 关键 字 | Aliases | 建筑物业 | 默认 | 说明 |
|---|---|---|---|---|
Connect Timeout |
Connection Timeout、ConnectTimeout、Timeout |
ConnectTimeout |
15 |
等待连接的时间是几秒钟,包括等待池满时的池状连接。
0 无限期等待。 |
Command Timeout |
None | CommandTimeout |
30 |
连接上创建的命令 CommandTimeout 默认值,每秒计。
0 无限期等待。 |
Connect Timeout 不限制查询执行。
Command Timeout 这不限制登录或等待合并连接的时间。 将a CancellationToken 传递给异步调用,使呼叫者在任一超时结束前停止等待。
连接恢复选项
| 关键 字 | 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的超载。 关于自定义策略,请参见 可配置重试逻辑。 只有在安全重复命令时才重试。
池化选项
| 关键 字 | 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关闭阻挡 for Azure SQL endpoints. |
每个不同的连接字符串都有自己的池。 关于池密钥、清除和空闲时间,请参见 SQL Server 连接池。
交易和会话选项
| 关键 字 | 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框架选项
这些关键词仅在 .NET 框架上被接受。 在.NET上,建造者不断NotSupportedExceptionSqlConnectionArgumentException抛掷。
| 关键 字 | 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. |
不支持的关键词
| 关键 字 | 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 Source、PasswordFailover PartnerInitial CatalogUser ID、 、 或Workstation IDAttachDBFilename,的 TDS 限制Application Name,这个值要长于 。Current Language
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。 在分阶段部署期间,旧池和新池同时存在,因此服务器的物理连接总数可能会增加。