每个 .NET Framework 数据提供程序都有一个继承自 DbConnection 的 Connection 对象,以及一个提供程序特定的 ConnectionString 属性。 每个提供程序的特定连接字符串语法记录在其 ConnectionString 属性中。 下表列出了 .NET Framework 中包含的四个数据提供程序。
.NET Framework 数据提供程序 | 说明 |
---|---|
System.Data.SqlClient | 提供对 Microsoft SQL Server 7.0 或更高版本中数据的访问。 有关连接字符串语法的更多信息,请参见 ConnectionString。 |
System.Data.OleDb | 提供对使用 OLE DB 公开的数据源中的数据的访问。 有关连接字符串语法的更多信息,请参见 ConnectionString。 |
System.Data.Odbc | 提供对使用 ODBC 公开的数据源中数据的访问。 有关连接字符串语法的更多信息,请参见 ConnectionString。 |
System.Data.OracleClient | 提供对 Oracle 8.1.7 或更高版本中数据的访问。 有关连接字符串语法的更多信息,请参见 ConnectionString。 |
ADO.NET 2.0 为每个 .NET Framework 数据提供程序引入新的连接字符串生成器,从而在创建语法有效的连接字符串时无需进行猜测。 有关更多信息,请参见连接字符串生成器 (ADO.NET) 。
指定 Windows 身份验证
建议使用 Windows 身份验证(有时也称为“集成安全性”)连接到支持其的数据源。 连接字符串中使用的语法根据提供程序的不同而不同。 下表演示用于 .NET Framework 数据提供程序的 Windows 身份验证语法。
提供程序 | 语法 |
---|---|
SqlClient | Integrated Security=true; -- or -- Integrated Security=SSPI; |
OleDb | Integrated Security=SSPI; |
Odbc | Trusted_Connection=yes; |
OracleClient | Integrated Security=yes; |
![]() |
---|
Integrated Security=true 用于 OleDb 提供程序时会引发异常 |
使用 SqlClient 连接字符串
SqlConnection 的 ConnectionString 属性允许您获取或设置 SQL Server 7.0 或更高版本数据库中的连接字符串。 必须使用用于 OleDb 的 .NET 数据提供程序,才能连接到较早版本的 SQL Server。 大多数连接字符串关键字还会在 SqlConnectionStringBuilder 中映射为属性。
下列各个语法形式都将使用 Windows 身份验证连接到本地服务器上的 AdventureWorks 数据库。
"Persist Security Info=False;Integrated Security=true; |
使用 SQL Server 登录
Windows 身份验证是用于连接到 SQL Server 的首选方法。 但是,如果需要 SQL Server 身份验证,请使用下列语法来指定用户名和密码。 在此示例中,星号用来表示有效用户名和密码。
"Persist Security Info=False;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer" |
![]() |
---|
Persist Security Info 关键字的默认设置为 false 。 如果将其设置为 true 或 yes ,则允许在打开连接后通过连接获取安全敏感信息(包括用户 ID 和密码)。 保持将 Persist Security Info 设置为 false ,以确保不受信任的来源不能访问敏感的连接字符串信息。 |
若要连接到 SQL Server 2000 或更高版本的命名实例,请使用 server name/instance name 语法。
Data Source=MySqlServer/MSSQL1;" |
在生成连接字符串时,您还可以将 SqlConnectionStringBuilder 的 DataSource 属性设置为实例名。 SqlConnection 对象的 DataSource 属性是只读的。
设置网络库
可使用网络库来建立与 SQL Server 实例的连接。 在此示例中,网络库是 Win32 Winsock TCP/IP (dbmssocn),1433 是使用的端口。
Network Library=dbmssocn;Data Source=000.000.000.000,1433; |
通过 SQL Server,您可以在建立连接时使用下列网络库。
名称 | 库 |
---|---|
dbnmpntw | Win32 命名管道 |
dbmssocn | Win32 Winsock TCP/IP |
dbmsspxn | Win32 SPX/IPX |
dbmsvinn | Win32 Banyan Vines |
dbmsrpcn | Win32 Multiprotocol (Windows RPC) |
使用类型系统版本关键字来指定 SQL Server 版本
Type System Version 关键字用于为在 SQL Server 2005 实例中运行的应用程序指定较早版本的 SQL Server。 这样可防止不兼容类型可能出现的问题,这些问题可能会导致应用程序运行中断。 例如,如果要使应用程序仅与 SQL Server 2000 类型系统一起工作,请在连接到 SQL Server 2005 实例时使用下列连接字符串片段。
"Type System Version=SQL Server 2000;" |
还可以使用 SqlConnectionStringBuilder 的 TypeSystemVersion 属性来指定类型系统版本。
下表中描述了可能的值。
值 | 说明 |
---|---|
Latest | 默认值。 使用此客户端-服务器对所能处理的类型系统的最新版本。 使用的版本会随着客户端和服务器组件的升级而自动升级。 |
SQL Server 2008 | 使用 SQL Server 2008 类型系统。 |
SQL Server 2005 | 使用 SQL Server 2005 类型系统。 未对当前版本的 ADO.NET 执行转换。 |
SQL Server 2000 | 使用 SQL Server 2000 类型系统。 当连接到 SQL Server 2005 实例时会执行下列比较: XML 与 NTEXT 的比较 UDT 与 VARBINARY 的比较 VARCHAR(MAX)、NVARCHAR(MAX) 和 VARBINARY(MAX) 分别与 TEXT、NEXT 和 IMAGE 的比较。 |
附加到 SQL Server Express 用户实例
用户实例是仅在 SQL Server 2005 速成版中提供的新功能。 它们允许以最低权限的本地 Windows 帐户运行的用户附加并运行 SQL Server 数据库,而无需具有管理权限。 使用用户 Windows 凭据执行用户实例,而不是作为服务执行用户实例。
SqlConnectionStringBuilder UserInstance 和 AttachDBFilename 属性也支持用户实例。 有关使用用户实例的更多信息,请参见连接到 SQL Server Express 用户实例 (ADO.NET) 。
AttachDbFileName 连接字符串关键字用于附加主数据库文件 (.mdf),该文件必须包含完整路径名。AttachDbFileName 还与 SqlConnection 连接字符串中的“extended properties”和“initial file name”键相对应。 此示例使用主数据文件位置的绝对路径。
"AttachDbFileName=c:/data/Northwind.mdf;Integrated Security=true;Initial Catalog=Northwind;" |
使用 DataDirectory 替代字符串
AttachDbFileName 已在 ADO.NET 2.0 中进行了扩展,引入了 |DataDirectory| (包含在管道符号中)替代字符串。DataDirectory 与 AttachDbFileName 结合使用可指示数据文件的相对路径,允许开发人员创建基于数据库源的相对路径(而无需指定完整路径)的连接字符串。
DataDirectory 点的物理位置取决于应用程序的类型。 在此示例中,要附加的 Northwind.mdf 文件位于应用程序的 /app_data 文件夹中。
Data Source=.//SQLExpress;Integrated Security=true; |
使用 DataDirectory 时,目录结构中的结果文件的路径不能高于替代字符串指向的目录。 例如,如果完全展开的 DataDirectory 为 C:/AppDirectory/app_data,则上面显示的示例连接字符串有效,因为它在 c:/AppDirectory 之下。 但是,如果尝试将 DataDirectory 指定为 |DataDirectory|/../data ,将会产生一个错误,因为 /data 不是 /AppDirectory 的子目录。
如果连接字符串的替代字符串格式不正确,将会引发 ArgumentException。
![]() |
---|
System.Data.SqlClient 会将替代字符串解析为本地计算机文件系统的完整路径。 因此,不支持远程服务器、HTTP 和 UNC 路径名。 如果在服务器未在本地计算机上的情况下打开连接,会引发异常。 |
使用 TrustServerCertificate
TrustServerCertificate 关键字在 ADO.NET 2.0 中是新增的,仅在使用有效证书连接到 SQL Server 2005 实例时才有效。 当 TrustServerCertificate 设置为 true 时,传输层将使用 SSL 来加密通道并跳过证书链以验证信任。
"TrustServerCertificate=true;" |
![]() |
---|
如果 TrustServerCertificate 设置为 true 并已启动加密,将使用对服务器指定的加密级别,即使 Encrypt 在连接字符串中被设置为 false 。 否则连接将会失败。 |
启用加密
如果要在未向服务器提供证书的情况下启用加密,必须在 SQL Server 配置管理器中设置“强制协议加密” 和“信任服务器证书” 选项。 在此情况下,如果未向服务器提供可验证的证书,加密将使用未经验证的自签名服务器证书。
应用程序设置无法降低在 SQL Server 中配置的安全级别,但可以增强安全级别。 应用程序可以通过将 TrustServerCertificate 和 Encrypt 关键字设置为 true 来请求加密,以保证在未提供服务器证书和未对客户端配置“强制协议加密” 的情况下仍能够进行加密。 但是,如果未在客户端配置中启用 TrustServerCertificate ,则仍需要提供服务器证书。
下表描述了各种情况。
“强制协议加密”客户端设置 | “信任服务器证书”客户端设置 | “密加/使用数据加密”连接字符串/属性 | “信任服务器证书”连接字符串/属性 | 结果 |
---|---|---|---|---|
否 | N/A | 否(默认值) | 忽略 | 不加密。 |
否 | N/A | 是 | 否(默认值) | 只有在具有可验证的服务器证书的情况下才能进行加密,否则连接尝试将失败。 |
否 | N/A | 是 | 是 | 只有在具有可验证的服务器证书的情况下才能进行加密,否则连接尝试将失败。 |
是 | 否 | 忽略 | 忽略 | 只有在具有可验证的服务器证书的情况下才能进行加密,否则连接尝试将失败。 |
是 | 是 | 否(默认值) | 忽略 | 只有在具有可验证的服务器证书的情况下才能进行加密,否则连接尝试将失败。 |
是 | 是 | 是 | 否(默认值) | 只有在具有可验证的服务器证书的情况下才能进行加密,否则连接尝试将失败。 |
是 | 是 | 是 | 是 | 只有在具有可验证的服务器证书的情况下才能进行加密,否则连接尝试将失败。 |
有关更多信息,请参见 SQL Server 2005 Books Online(《SQL Server 2005 联机丛书》)中的“Encryption Hierarchy”(加密层次结构)和“Using Encryption Without Validation”(使用未经验证的加密)。
OleDb 连接字符串
OleDbConnection 的 ConnectionString 属性允许您获取或设置 OLE DB 数据源(如 Microsoft Access 或者 SQL Server 6.5 或更早版本)的连接字符串。 对 SQL Server 7.0 或更高版本使用 SqlConnection。OleDbConnectionStringBuilder 类也支持 OleDb 连接字符串。
OleDb 连接字符串语法
必须为 OleDbConnection 连接字符串指定提供程序名称。 下列连接字符串使用 Jet 提供程序连接到 Microsoft Access 数据库。 请注意,如果数据库未受到保护(默认值),可选择 UserID 和 Password 关键字。
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:/Northwind.mdb;User ID=Admin;Password=; |
如果 Jet 数据库受到保护,则您必须提供工作组信息文件的位置。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/Northwind.mdb;Jet OLEDB:System Database=d:/NorthwindSystem.mdw;User ID=*****;Password=*****; |
对 SQL Server 6.5 或更早版本使用 sqloledb 关键字。
Provider=sqloledb;Data Source=MySqlServer;Initial Catalog=pubs;User Id=*****;Password=*****; |
![]() |
---|
可以在通用数据链接 (UDL) 文件中提供 OleDbConnection 的连接信息;但是,应避免这样做。 UDL 文件未加密,会以明文形式公开连接字符串信息。 因为 UDL 文件对您的应用程序来说是一个基于文件的外部资源,所以无法使用 .NET Framework 保护该文件。 |
使用 DataDirectory 连接到 Access/Jet
DataDirectory 不是 SqlClient 独占的。 它还可以用于 System.Data.OleDb 和 System.Data.Odbc .NET 数据提供程序。 下面的 OleDbConnection 字符串示例演示连接到应用程序 app_data 文件夹中的 Northwind.mdb 所需的语法。 系统数据库 (System.mdw) 也存储在该位置。
"Provider=Microsoft.Jet.OLEDB.4.0; |
![]() |
---|
如果 Access/Jet 数据库未受到保护,则不需要在连接字符串中指定系统数据库的位置。 默认情况下安全性为关,所有用户可作为内置管理员用户使用空白密码进行连接。 即使在正确实现用户级安全时,Jet 数据库仍很容易受到攻击。 由于 Access/Jet 数据库的基于文件的安全性架构存在固有弱点,因此不建议在 Access/Jet 数据库中存储敏感信息。 |
连接到 Excel
Microsoft Jet 提供程序用于连接到 Excel 工作簿。 下列连接字符串中的 Extended Properties 关键字会设置特定于 Excel 的属性。 “HDR=Yes;”指示第一行包含列名称,但不包含数据;“IMEX=1;”指示驱动程序始终将“intermixed”数据列作为文本进行读取。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"" |
请注意,Extended Properties 所需的双引号字符还必须包含在双引号中。
Data Shape 提供程序连接字符串语法
在使用 Microsoft Data Shape 提供程序时,请同时使用 Provider 和 Data Provider 关键字。 下面的示例使用 Shape 提供程序连接到 SQL Server 的本地实例。
"Provider=MSDataShape;Data Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;Integrated Security=SSPI;" |
Odbc 连接字符串
OdbcConnection 的 ConnectionString 属性允许您获取或设置 OLE DB 数据源的连接字符串。 OdbcConnectionStringBuilder 也支持 Odbc 连接字符串。
下列连接字符串使用 Microsoft 文本驱动程序。
Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=d:/bin |
使用 DataDirectory 连接到 Visual FoxPro
下面的 OdbcConnection 连接字符串示例演示如何使用 DataDirectory 连接到 Microsoft Visual FoxPro 文件。
"Driver={Microsoft Visual FoxPro Driver}; |
Oracle 连接字符串
OracleConnection 的 ConnectionString 属性允许您获取或设置 OLE DB 数据源的连接字符串或。 OracleConnectionStringBuilder 也支持 Oracle 连接字符串。
Data Source=Oracle9i;User ID=*****;Password=*****; |