connectionstring各属性的意思解释

备注
ConnectionString 类似于 OLE DB 连接字符串,但并不相同。与 OLE DB 或 ADO 不同,如果“Persist Security Info”值设置为 false(默认值),则返回的连接字符串与用户设置的 ConnectionString 相同但去除了安全信息。除非将“Persist Security Info”设置为 true,否则,SQL Server .NET Framework 数据提供程序将不会保持,也不会返回连接字符串中的密码。

可以使用 ConnectionString 属性连接到数据库。下面的示例阐释了一个典型的连接字符串。

复制代码
"Persist Security Info=False;Integrated Security=true;Initial Catalog=Northwind;server=(local)"使用新的 SqlConnectionStringBuilder 在运行时构造有效的连接字符串。有关更多信息,请参见连接字符串生成器 (ADO.NET)。

只有在连接关闭时才能设置 ConnectionString 属性。许多连接字符串值都具有相应的只读属性。当设置连接字符串时,将更新这些属性(除非检测到错误)。在此情况下,不会更新任何属性。 SqlConnection 属性只返回那些包含在 ConnectionString 中的设置。

若要连接到本地计算机,请将服务器指定为“(本地)”。如果未指定服务器名称,则会尝试连接到本地计算机上的默认实例。

重 置已关闭连接上的 ConnectionString 会重置包括密码在内的所有连接字符串值(和相关属性)。例如,如果设置一个连接字符串,其中包含“Database= AdventureWorks”,然后再将该连接字符串重置为“Data Source=myserver;Integrated Security=true”,则 Database 属性将不再设置为“AdventureWorks”。

在设置后会立即分析连接字符串。如果在分析时发现语法中有错误,则产生运行时异常,如 ArgumentException。只有当试图打开连接时,才会发现其他错误。

连 接字符串的基本格式包括一系列由分号分隔的关键字/值对。等号 (= ) 连接各个关键字及其值。若要包括含有分号、单引号字符或双引号字符的值,则该值必须用双引号括起来。如果该值同时包含分号和双引号字符,则该值可以用单引 号括起来。如果该值以双引号字符开始,则也可以使用单引号。相反,如果该值以单引号开始,也可以使用双引号。如果该值同时包含单引号和双引号字符,则用于 将该值括起来的引号字符每次出现时,都必须成对出现。

若要在字符串值中包括前导或尾随空格,则该值必须用单引号或双引号括起来。即使 将整数、布尔值或枚举值用引号括起来,其周围的任何前导或尾随空格也将被忽略。然而,保留字符串关键字或值内的空格。使用 .NET Framework 1.1 版或更高版本时,在连接字符串中可以使用单引号或双引号,而不用使用分隔符(例如,Data Source= my'Server 或 Data Source= my"Server),但引号字符不可以为值的第一个或最后一个字符。

若要在关键字或值中包括等号 (=),则它之前必须还有另一个等号。例如,在假设的连接字符串中,

复制代码
"key==word=value"关键字是“key=word”并且值是“value”。

如果关键字/值对中的一个特定关键字多次出现在连接字符串中,则将所列出的最后一个用于值集。

关键字不区分大小写。

下表列出了 ConnectionString 中的关键字值的有效名称。

关键字
默认值
说明

应用程序名称
N/A
应用程序的名称,或者“.Net SqlClient Data Provider”(如果不提供应用程序名称)。

Async
'false'
如果设置为 true,则启用异步操作支持。可识别的值为 true、false、yes 和 no。

AttachDBFilename

- 或 -

extended properties

- 或 -

Initial File Name
N/A
主数据库文件的名称,包括可连接数据库的完整路径名。只有具有 .mdf 扩展名的主数据文件才支持 AttachDBFilename。

如果主数据文件为只读,则附加操作将失败。

该路经可以是绝对路径,也可以是相对路径,这取决于是否使用 DataDirectory 替换字符串。如果使用 DataDirectory,则对应的数据库文件必须存在于替换字符串指向的目录的子目录中。

说明:
远程服务器、HTTP 及 UNC 路径名不受支持。


必须按照如下方式使用关键字“database”(或其别名之一)指定数据库名称:

"AttachDbFileName=|DataDirectory|/data/YourDB.mdf;integrated security=true;database=YourDatabase"

如果数据文件所在的目录中存在日志文件,并且在附加主数据文件时使用了“database”关键字,则会生成错误。这种情况下,请移除日志文件。附加了数据库后,系统将根据物理路径自动生成一个新的日志文件。

Connect Timeout

- 或 -

Connection Timeout
15
在终止尝试并产生错误之前,等待与服务器的连接的时间长度(以秒为单位)。

Context Connection
'false'
如果应对 SQL Server 进行进程内连接,则为 true。

Current Language
N/A
SQL Server 语言记录名称。

Data Source

- 或 -

Server

- 或 -

Address

- 或 -

Addr

- 或 -

Network Address
N/A
要连接的 SQL Server 实例的名称或网络地址。可以在服务器名称之后指定端口号:

server=tcp:servername, portnumber

指定本地实例时,始终使用 (local)。若要强制使用某个协议,请添加下列前缀之一:

np:(local), tcp:(local), lpc:(local)

说明:
ADO.NET 2.0 不支持在 SQL Server 2000 或更低版本的共享内存上执行异步命令。但是,可以强制用 TCP 代替共享内存,方法是:向连接字符串中的服务器名称添加“tcp:”前缀,或者使用“本地主机”。


Encrypt
'false'
当该值为 true 时,如果服务器端安装了证书,则 SQL Server 将对所有在客户端和服务器之间传送的数据使用 SSL 加密。可识别的值为 true、false、yes 和 no。

Enlist
'false'
true 表明 SQL Server 连接池程序在创建线程的当前事务上下文中自动登记连接。

Failover Partner
N/A
在其中配置数据库镜像的故障转移合作伙伴服务器的名称。

.NET Framework 1.0 或 1.1 版不支持 Failover Partner 关键字。

Initial Catalog

- 或 -

Database
N/A
数据库的名称。

Integrated Security

- 或 -

Trusted_Connection
'false'
当为 false 时,将在连接中指定用户 ID 和密码。当为 true 时,将使用当前的 Windows 帐户凭据进行身份验证。

可识别的值为 true、false、yes、no 以及与 true 等效的 sspi(强烈推荐)。

MultipleActiveResultSets
'false'
如果为 true,则应用程序可以维护多活动结果集 (MARS)。如果为 false,则应用程序必须在执行该连接上的任何其他批处理之前处理或取消一个批处理中的多个结果集。

可识别的值为 true 和 false。

.NET Framework 1.0 或 1.1 版不支持该关键字。

Network Library

- 或 -

Net
'dbmssocn'
用于建立与 SQL Server 实例的连接的网络库。支持的值包括:

dbnmpntw(命名管道)

dbmsrpcn(多协议,Windows RPC)

dbmsadsn (Apple Talk)

dbmsgnet (VIA)

dbmslpcn(共享内存)

dbmsspxn (IPX/SPX)

dbmssocn (TCP/IP)

Dbmsvinn (Banyan Vines)

相应的网络 DLL 必须安装在要连接的系统上。如果不指定网络而使用一个本地服务器(比如“.”或“(local)”),则使用共享内存。在此示例中,网络库为 Win32 Winsock TCP/IP (dbmssocn),使用的端口为 1433。

复制代码
Network Library=dbmssocn;Data Source=000.000.000.000,1433;
Packet Size
8192
用来与 SQL Server 的实例进行通信的网络数据包的大小,以字节为单位。

Password

- 或 -

Pwd
N/A
SQL Server 帐户登录的密码。建议不要使用。为保持高安全级别,我们强烈建议您使用 Integrated Security 或 Trusted_Connection 关键字。

Persist Security Info
'false'
当该值设置为 false 或 no(强烈推荐)时,如果连接是打开的或者一直处于打开状态,那么安全敏感信息(如密码)将不会作为连接的一部分返回。重置连接字符串将重置包括密码在内的所有连接字符串值。可识别的值为 true、false、yes 和 no。

Replication
'false'
如果使用连接来支持复制,则为 true。

Transaction Binding
Implicit Unbind
控制与登记的 System.Transactions 事务关联的连接。

可能的值包括:

Transaction Binding=Implicit Unbind;

Transaction Binding=Explicit Unbind;

Implicit Unbind 可使连接在事务结束时从事务中分离。分离后,连接上的其他请求将以自动提交模式执行。在事务处于活动状态的情况下执行请求时,不会检查 System.Transactions.Transaction.Current 属性。事务结束后,其他请求将以自动提交模式执行。

Explicit Unbind 可使连接保持连接到事务,直到连接关闭或调用显式 SqlConnection.TransactionEnlist(null)。如果 Transaction.Current 不是登记的事务或登记的事务未处于活动状态,则引发 InvalidOperationException。

TrustServerCertificate
'false'
如果设置为 true,则使用 SSL 对通道进行加密,但不通过证书链对可信度进行验证。如果将 TrustServerCertificate 设置为 true 并将 Encrypt 设置为 false,则不对通道进行加密。可识别的值为 true、false、yes 和 no。有关更多信息,请参见连接字符串语法 (ADO.NET)。

Type System Version
N/A
指示应用程序期望的类型系统的字符串值。可能的值包括:

Type System Version=SQL Server 2000;

Type System Version=SQL Server 2005;

Type System Version=SQL Server 2008;

Type System Version=Latest;

如果设置为 SQL Server 2000,将使用 SQL Server 2000 类型系统。与 SQL Server 2005 实例连接时,执行下列转换:

XML 到 NTEXT

UDT 到 VARBINARY

VARCHAR(MAX)、NVARCHAR(MAX) 和 VARBINARY(MAX) 分别到 TEXT、NEXT 和 IMAGE。

如果设置为 SQL Server 2005,将使用 SQL Server 2005 类型系统。对 ADO.NET 的当前版本不进行任何转换。

如果设置为 Latest,将使用此客户端-服务器对无法处理的最新版本。这个最新版本将随着客户端和服务器组件的升级自动更新。

User ID
N/A
SQL Server 登录帐户。建议不要使用。为保持高安全级别,我们强烈建议您使用 Integrated Security 或 Trusted_Connection 关键字。

User Instance
'false'
一个值,用于指示是否将连接从默认的 SQL Server 速成版实例重定向到调用方帐户下运行的运行时启动的实例。

Workstation ID
本地计算机名称
连接到 SQL Server 的工作站的名称。


下表列出了 ConnectionString 内连接池值的有效名称。For more information, see SQL Server 连接池 (ADO.NET).

名称
默认值
说明

Connection Lifetime
0
当连接被返回到池时,将其创建时间与当前时间作比较,如果时间长度(以秒为单位)超出了由 Connection Lifetime 指定的值,该连接就会被销毁。这在聚集配置中很有用(用于强制执行运行中的服务器和刚置于联机状态的服务器之间的负载平衡)。

零 (0) 值将使池连接具有最大的连接超时。

Enlist
'true'
当该值为 true 时,池程序在创建线程的当前事务上下文中自动登记连接。可识别的值为 true、false、yes 和 no。

Load Balance Timeout
0
连接被销毁前在连接池中生存的最短时间(以秒为单位)。

Max Pool Size
100
池中允许的最大连接数。

Min Pool Size
0
池中允许的最小连接数。

Pooling
'true'
当该值为 true 时,系统将从适当的池中提取 SQLConnection 对象,或在需要时创建该对象并将其添加到适当的池中。可识别的值为 true、false、yes 和 no。


当设置需要布尔值的关键字或连接池值时,您可以使用“yes”代替“true”,用“no”代替“false”。整数值表示为字符串。

说明:
SQL Server .NET Framework 数据提供程序使用它自己的协议与 SQL Server 进行通信。因此,当连接到 SQL Server 时,它不支持 ODBC 数据源名称 (DSN) 的使用,因为它不添加 ODBC 层。

说明:
用于 SQL Server 的 .NET Framework 数据提供程序不支持通用数据链接 (UDL) 文件。

<think>好的,我现在要解决用户遇到的“ConnectionString 属性尚未初始化”的错误。首先,我需要理解这个错误出现的常见原因。根据用户的描述和提供的引用资料,特别是引用[3]提到的未初始化对象引用会导致NullReferenceException,这可能是因为在使用数据库连接时,ConnectionString属性没有被正确赋值。 接下来,我应该考虑用户可能的场景。用户可能是在C#项目中配置数据库连接,可能在app.config或代码中设置连接字符串时出现了问题。引用[1]提到在app.config中添加appSettings导致配置初始化错误,这可能意味着用户的配置文件存在格式问题,或者读取配置的方式不正确。此外,引用[2]提到属性冲突的问题,虽然这可能不直接相关,但需要确认配置的各个部分是否兼容。 首先,检查配置文件是否正确。用户可能没有正确配置连接字符串的节点。正确的做法是在app.config中使用<connectionStrings>节点,而不是<appSettings>。例如: ```xml <configuration> <connectionStrings> <add name="MyConnection" connectionString="Data Source=..."/> </connectionStrings> </configuration> ``` 然后,在代码中使用ConfigurationManager.ConnectionStrings来读取,而不是ConfigurationManager.AppSettings。例如: ```csharp string connStr = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; ``` 如果用户错误地使用了AppSettings,或者节点名称不对,就会导致ConnectionString为null,从而引发错误。 另外,用户可能在代码中没有正确初始化SqlConnection对象。例如,直接使用new SqlConnection()而没有传递连接字符串,或者在打开连接之前没有设置ConnectionString属性。这种情况下,需要确保在打开连接前已经赋值: ```csharp using (SqlConnection conn = new SqlConnection()) { conn.ConnectionString = connStr; // 确保这里已经赋值 conn.Open(); } ``` 或者更直接地在构造函数中传入连接字符串: ```csharp using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); } ``` 还要检查连接字符串本身是否正确,是否有拼写错误,或者缺少必要的参数,比如DataSource、Initial Catalog等。如果连接字符串错误,可能在尝试打开连接时抛出异常,但这里的问题更可能是在初始化阶段。 另外,需要注意是否在代码中错误地重复释放了连接对象,或者在对象释放后再次使用它,这会导致ObjectDisposedException,但根据错误信息,这里主要是未初始化的问题。 可能还需要检查项目是否引用了System.Configuration.dll,否则ConfigurationManager类无法使用,导致读取不到连接字符串,进而ConnectionString为null。用户可能在代码中使用了ConfigurationManager但没有添加必要的引用。 此外,用户可能在代码中使用了某个数据访问层的类库,比如Entity Framework,这时候需要确认是否在DbContext的构造函数中正确传递了连接字符串名称或连接字符串本身。 总结可能的解决方案步骤: 1. 检查app.config中的连接字符串配置是否正确,是否在<connectionStrings>节点下。 2. 确保代码中正确读取连接字符串,使用ConfigurationManager.ConnectionStrings而非AppSettings。 3. 确认SqlConnection对象在使用前已正确初始化ConnectionString属性。 4. 检查连接字符串的内容是否正确,参数是否完整。 5. 确保项目引用了System.Configuration程序集。 6. 避免在对象释放后再次使用,确保生命周期管理正确。 最后,根据用户提供的引用资料,特别是引用[1]中的配置初始化错误,需要提醒用户检查配置文件的格式是否正确,是否存在XML语法错误,比如未闭合的标签或特殊字符未转义,这可能导致配置系统无法初始化,进而无法读取连接字符串,导致后续的未初始化错误。</think>### ConnectionString 属性未初始化错误解决方案 #### 1. 检查配置文件格式与节点 - **问题**:连接字符串未正确配置在$app.config$或$web.config$中,或使用了错误的节点名称 - **解决方案**: - 确保连接字符串位于$<connectionStrings>$节点内,而非$<appSettings>$: ```xml <configuration> <connectionStrings> <add name="MyDB" connectionString="Server=.;Database=Test;Integrated Security=True;" providerName="System.Data.SqlClient"/> </connectionStrings> </configuration> ``` - 避免XML格式错误(如未闭合标签),否则会触发“配置系统未能初始化”错误[^1] #### 2. 确认代码读取方式 - **问题**:使用$ConfigurationManager.AppSettings$读取连接字符串,导致值为空 - **解决方案**: - 正确调用$ConfigurationManager.ConnectionStrings$: ```csharp // 正确方式 string connStr = ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString; ``` - 添加对$System.Configuration$程序集的引用(项目右键→添加引用→勾选System.Configuration) #### 3. 验证对象初始化过程 - **问题**:未给$SqlConnection.ConnectionString$赋值直接调用$Open()$ - **解决方案**: ```csharp // 方式1:通过构造函数初始化 using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); } // 方式2:显式赋值 SqlConnection conn = new SqlConnection(); conn.ConnectionString = connStr; // 必须赋值 conn.Open(); ``` #### 4. 排查连接字符串内容 - **问题**:连接字符串参数缺失或格式错误 - **检查项**: - 服务器地址(如$Server=localhost$) - 身份验证方式($Integrated Security=True$或$User ID=...;Password=...$) - 数据库名称($Database=MyDB$) - 超时设置($Connect Timeout=30$) #### 5. 避免对象生命周期问题 - **问题**:尝试访问已释放的对象,引发$ObjectDisposedException$[^3] - **解决方法**: - 使用$using$语句自动释放资源 - 禁止重复调用$Close()$或$Dispose()$ #### 6. 调试验证步骤 1. 输出连接字符串值:`Console.WriteLine(connStr ?? "NULL")` 2. 检查$ConfigurationManager.ConnectionStrings$集合是否包含目标名称 3. 使用$try-catch$捕获详细异常信息
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值