在 ADO.NET 中的连接字符串
连接字符串包含作为参数从数据提供程序传递到数据源的初始化信息。 数据提供程序接收连接字符串,作为 DbConnection.ConnectionString 属性的值。 提供程序解析连接字符串,并确保语法正确且支持关键字。 然后 DbConnection.Open() 方法将已解析的连接参数传递到数据源。 数据源执行进一步验证并建立连接。
连接字符串语法
连接字符串是使用分号分隔的键/值参数对列表:
keyword1=value; keyword2=value;
关键字不区分大小写。 但是,值可能会区分大小写,具体取决于数据源。 关键字和值都可以包含空白字符。 关键字和不带引号的值中忽略前导空格和尾随空格。
如果值包含分号、Unicode 控制字符、前导空格或尾随空格,则必须用单引号或双引号将其括起。 例如:
Keyword=" whitespace ";
Keyword='special;character';
封闭字符不能出现在其括起的值内。 因此,包含单引号的值只能用双引号括起,反之亦然:
Keyword='double"quotation;mark';
Keyword="single'quotation;mark";
还可以通过同时使用两者来转义封闭字符:
Keyword="double""quotation";
Keyword='single''quotation';
引号本身以及等号不需要转义,因此以下连接字符串是有效的:
Keyword=no "escaping" 'required';
Keyword=a=b=c
由于系统会读取下一个分号或字符串末尾之前的每个值,因此后一个示例中的值为 a=b=c
,且最后一个分号是可选的。
所有连接字符串都适用于上述相同的基本语法。 但是,识别的关键字集取决于提供程序,并且从早期的 API(如 ODBC)开始,已经过了多年的发展演变。 适用于 SQL Server 的 .NET Framework 数据提供程序 (SqlClient
) 支持来自旧 API 的许多关键字,但通常更灵活,并且接受许多常见连接字符串关键字的同义词。
键入错误会导致错误。 例如,“Integrated Security=true
”是有效的,而“IntegratedSecurity=true
”则会导致出错。
在运行时从未验证的用户手动输入构造的连接字符串易受字符串注入式攻击,从而危害数据源的安全。 为了解决这些问题,ADO.NET 2.0 为每个 .NET Framework 数据提供程序引入了连接字符串生成器。 这些连接字符串生成器将参数公开为强类型属性,并使得在将连接字符串发送到数据源之前可以验证该连接字符串。
重要
Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。
本节内容
连接字符串生成器
演示如何使用 ConnectionStringBuilder
类在运行时构造有效的连接字符串。
连接字符串和配置文件
演示如何在配置文件中存储和检索连接字符串。
连接字符串语法
描述如何为 SqlClient
、OracleClient
、OleDb
和 Odbc
配置提供程序专用的连接字符串。
保护连接信息
演示保护用于连接到数据源的信息的各项技术。