连接字符串包含作为参数传递给数据源的初始化信息。在设置后会立即分析连接字符串。语法错误将生成运行时异常,但是只有在数据源验证了连接字符串中的信息后,才可以发现其他错误。验证后,数据源设置启用该连接的各种选项。
连接字符串关键字
连接字符串的格式是使用分号分隔的键/值参数对列表:
keyword1=value; keyword2=value |
忽略空格,关键字不区分大小写,尽管值可能会区分大小写,这取决于数据源的大小写。要加入包含分号、单引号或双引号的值,值必须加双引号。
有效的连接字符串语法依提供程序而异,从早期的 API(例如 ODBC)开始,经历了多年的发展。SQL Server .NET Framework 数据提供程序结合了早期语法中的许多元素,通常对常见的连接字符串语法更加宽容。有关 .NET 数据提供程序的连接字符串关键字的更多信息,请参见 ConnectionString、ConnectionString、ConnectionString 和 ConnectionString。
持续安全信息
连接字符串中 Persist Security Info
关键字的默认设置为 false。
Persist Security Info=false; |
如果将该关键字设置为 true 或 yes,将允许在打开连接后,从连接中获得涉及安全性的信息(包括用户标识和密码)。如果在建立连接时必须提供用户标识和密码,最安全的方法是在使用信息打开连接后丢弃这些信息,在 Persist Security Info 设置为 false 或 no 时会发生这种情况。当您向不可信的源提供打开的连接,或将连接信息永久保存到磁盘时,这点尤其重要。如果将 Persist Security Info 保持为 false,可帮助确保不可信的源无法访问连接中涉及安全性的信息,并帮助确保任何涉及安全性的信息都不会随连接字符串信息在磁盘上持久化。
使用 Windows 身份验证
我们建议您使用 Windows 身份验证(通常称为集成安全性)连接到服务器数据库上。要指定 Windows 身份验证,可以对 SQL Server .NET Framework 数据提供程序使用下列两个键/值对中的任意一个:
Integrated Security=true; Integrated Security=SSPI; |
但是,只有第二个将适用于 OleDb .NET Framework 数据提供程序。为 ConnectionString 设置 Integrated Security=true
将引发异常。
对于 ODBC .NET Framework 数据提供程序,必须使用以下键/值对指定 Windows 身份验证。
Trusted_Connection=yes; |
创建连接字符串
每个 .NET Framework 数据提供程序提供一个从 DbConnectionStringBuilder 继承的强类型连接字符串生成器类。连接字符串生成器使开发人员可以通过编程,基于用户输入创建语法正确的连接字符串,以及分析并重新生成现有的连接字符串。有关更多信息,请参见 SqlConnectionStringBuilder、OleDbConnectionStringBuilder、OdbcConnectionStringBuilder 和 OracleConnectionStringBuilder。
存储和检索连接字符串
我们建议您不要在代码中嵌入连接字符串。如果服务器的位置会更改,您的应用程序将需要重新编译。此外,编译成应用程序源代码的未加密连接字符串可以使用 MSIL 反汇编程序 (ildasm.exe) 查看。
将连接字符串存储在配置文件中
为了避免将连接字符串存储在代码中,可以将代码存储在 ASP.NET 应用程序的 web.config 文件中以及 Windows 应用程序的 app.config 文件中。
连接字符串可以存储在配置文件的 <connectionStrings> 元素中。连接字符串存储为键/值对的形式,可以在运行时使用名称查找存储在 connectionString 属性中的值。以下配置文件示例显示名为 DatabaseConnection 的连接字符串,该连接字符串引用连接到 SQL Server 本地实例的连接字符串。
<connectionStrings> <add name="DatabaseConnection" connectionString="Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local);" providerName="System.Data.SqlClient" /> </connectionStrings> |
从配置文件中检索连接字符串
System.Configuration 命名空间提供使用配置文件中存储的配置信息的类。ConnectionStringSettings 类具有两个属性,映射到上面所示的 <connectionStrings> 示例部分中显示的名称。
-
ConnectionString
-
连接字符串。
-
Name
-
<connectionStrings> 部分的连接字符串的名称。
可以使用受保护的配置可选地加密配置文件中存储的连接字符串。请参见使用受保护的配置加密配置信息、对配置节进行加密和解密和演练:使用受保护的配置加密配置信息。 |
示例
以下示例通过将连接字符串的名称传递给 ConfigurationManager,再由其返回 ConnectionStringSettings 对象,以便从配置文件中检索连接字符串。ConnectionString 属性用于显示此值。
C# | |
---|---|
using System; using System.Configuration; class Program { static void Main() { ConnectionStringSettings settings; settings = ConfigurationManager.ConnectionStrings["DatabaseConnection"]; if (settings != null) { Console.WriteLine(settings.ConnectionString); } } } |
SqlClient 连接字符串
SqlConnection 的 ConnectionString 属性可以为 SQL Server 7.0 或更高版本的数据库获取或设置连接字符串。如果需要连接到早期版本的 SQL Server,必须使用 OleDb .NET 数据提供程序。
SqlClient 连接字符串语法
连接到 SQL Server 数据库的语法很灵活。下列每个语法形式均将使用集成安全性连接到本地服务器上的 AdventureWorks 数据库。始终通过名称或通过关键字 (local)
指定服务器。
"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)" |
要强制使用某个协议,请添加下列前缀之一:
np:(local), tcp:(local), lpc:(local)
对于 SQL Server 身份验证,使用此语法指定用户名和密码,其中的星号表示有效的用户名和密码。
"Persist Security Info=False;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer" |
有关有效的连接字符串关键字的完整列表,请参见 ConnectionString。
连接到命名实例
要连接到 SQL Server 2000 或更高版本的命名实例,请使用 server name/instance name 语法。
Server=MySqlServer/MSSQL1;" |
设置网络库
使用此语法通过 IP 地址连接,其中的网络库为 Win32 Winsock TCP/IP,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 多重协议 (Windows RPC)
OleDb 连接字符串
通过 OleDbConnection 的 ConnectionString 属性可以为 OLE DB 数据源(例如 Microsoft Access 或 SQL Server 6.5 或更低版本)获取或设置连接字符串。对 SQL Server 7.0 或更高版本使用 SqlConnection。
OleDb 连接字符串语法
必须为 OleDbConnection 连接字符串指定提供程序名称。以下连接字符串使用 Jet 提供程序连接到 Microsoft Access 数据库。注意,如果数据库未受保护(默认设置),UserID 和 Password 关键字是可选的。
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:/Northwind.mdb;User ID=Admin;Password=; |
如果数据库受保护,必须提供工作组信息文件的位置。
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 保护其安全。
连接到 Excel
Microsoft Jet 提供程序用于连接到 Excel 工作簿。在以下连接字符串中,Extended Properties 关键字设置 Excel 特定的属性。“HDR=Yes;”指示第一行中包含列名,而不是数据,“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。注意
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 数据源获取或设置连接字符串。以下连接字符串使用 Microsoft 文本驱动程序。
Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=d:/bin |
有关 ODBC 连接字符串语法的更多信息,请参见 ConnectionString。
Oracle 连接字符串
OracleConnection 的 ConnectionString 属性可以为 OLE DB 数据源获取或设置连接字符串。
Data Source=Oracle9i;User ID=*****;Password=*****; |
有关 ODBC 连接字符串语法的更多信息,请参见 ConnectionString。