连接字符串语法 (ADO.NET)[MSDN]

来源:互联网 发布:淘宝店铺图标 编辑:程序博客网 时间:2024/04/30 11:04
 

每个 .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;
Initial Catalog=AdventureWorks;Server=MSSQL1"
"Persist Security Info=False;Integrated Security=SSPI;
database=AdventureWorks;server=(local)"
"Persist Security Info=False;Trusted_Connection=True;
database=AdventureWorks;server=(local)"

使用 SQL Server 登录

Windows 身份验证是用于连接到 SQL Server 的首选方法。 但是,如果需要 SQL Server 身份验证,请使用下列语法来指定用户名和密码。 在此示例中,星号用来表示有效用户名和密码。

  
"Persist Security Info=False;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer"
安全说明安全说明:

PersistSecurity Info 关键字的默认设置为 false。 如果将其设置为 trueyes,则允许在打开连接后通过连接获取安全敏感信息(包括用户 ID 和密码)。 保持将 PersistSecurity 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 凭据执行用户实例,而不是作为服务执行用户实例。

SqlConnectionStringBuilderUserInstance 和 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|(包含在管道符号中)替代字符串。DataDirectoryAttachDbFileName 结合使用可指示数据文件的相对路径,允许开发人员创建基于数据库源的相对路径(而无需指定完整路径)的连接字符串。

DataDirectory 点的物理位置取决于应用程序的类型。 在此示例中,要附加的 Northwind.mdf 文件位于应用程序的 /app_data 文件夹中。

 
Data Source=.//SQLExpress;Integrated Security=true;
User Instance=true;
AttachDBFilename=|DataDirectory|/app_data/Northwind.mdf;
Initial Catalog=Northwind;

使用 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 中配置的安全级别,但可以增强安全级别。 应用程序可以通过将 TrustServerCertificateEncrypt 关键字设置为 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 数据库。 请注意,如果数据库未受到保护(默认值),可选择 UserIDPassword 关键字。

  
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;
Data Source=|DataDirectory|/Northwind.mdb;
Jet OLEDB:System Database=|DataDirectory|/System.mdw;"
安全说明安全说明:

如果 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 提供程序时,请同时使用 ProviderData 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};
SourceDB=|DataDirectory|/MyData.DBC;SourceType=DBC;"

Oracle 连接字符串

OracleConnection 的 ConnectionString 属性允许您获取或设置 OLE DB 数据源的连接字符串或。 OracleConnectionStringBuilder 也支持 Oracle 连接字符串。

  
Data Source=Oracle9i;User ID=*****;Password=*****;