1.连接字符串定义
我们已经知道,ADO.NET类库为不同的外部数据源提供了一致的访问。这些数据源可以是本地的数据文件(如excel、txt、access,甚至是SQLite),也可以是远程的数据库服务器(如SQL Server、MySQL、DB2、Oracle等)。而我们可以选择一种既简单又容易操作的标识去连接不同的数据源,这时候连接字符串就起到了作用。
连接字符串是标识ADO.NET用怎样的方式,连接哪个数据库的字符串。连接不同的数据库,连接字符串的格式是不同的。在创建数据库连接的时候需要提供正确的连接字符串才能顺利进行数据库访问。
2.连接字符串语法格式
连接字符串的格式是使用分号分隔的键/值参数对列表:
keyword1=value; keyword2=value
3.例举几种典型连接字符串
部分资料参考可米小子,写得很好的系列。
3.1 SQL Server连接字符串
SQL Server支持Windows身份验证模式和混合模式两种身份验证模式。两种身份验证模式区别:windows身份验证,不验证sa密码,如果windows登录密码不正确,无法访问SQL Server;混合模式既可以使用windows身份验证登录,也可以在远程使用sa密码登录。在这两种情况下,连接字符串也是有区别的。
(1)Windows身份验证模式下的连接字符串:
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;
说明:
Data Source:需要连接的服务器。需要注意的是,如果使用的时Express版本的SQL Server需要在服务器名后加\SQLEXPRESS。例如,连接本地的SQL Server 2008 Express版本的数据库服务器,可以写成Data Source = (local)\SQLEXPRESS或者.\SQLEXPRESS。
Initial Catalog:默认使用的数据库名称
Integrate Security:使用存在的windows安全证书访问数据库。
(2)混合模式下的连接字符串
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
说明:
Data Source:同上所述。
Initial Catalog:同上所述。
User ID:数据库服务器账号。
Password:数据库服务器密码。
(3)一般在VS的环境下,通过添加数据库连接,会自动生成连接字符串,右击属性即可查到。
3.2 Access连接字符串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;Password=;
3.3 MySQL连接字符串
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
3.4 DB2连接字符串
Server=myAddress:myPortNumber;Database=myDataBase;UID=myUsername;PWD=myPassword;
3.5 Oracle连接字符串
Data Source=TORCL;User Id=myUsername;Password=myPassword;
string connStr = "Data Source=myServerAddress;Initial Catalog=Database.mdf;Integrated Security=True;User Instance=True";
4.2 使用ADO.NET提供的DbConnectionStringBuilder类来构造连接字符串
以SQL server为例子(需引入using System.Data.SqlClient;),SqlConnectionStringBuilder类继承与DbConnectionStringBuilder类
SqlConnectionStringBuilder build = new SqlConnectionStringBuilder(); build.DataSource = @"(local)\SQLEXPRESS"; build.InitialCatalog = "DataBase"; build.IntegratedSecurity = true;
好处:使用动态字符串串联根据用户输入生成连接字符串时,可能发生连接字符串注入式攻击。 如果未验证字符串并且未转义恶意文本或字符,则攻击者可能会访问服务器上的敏感数据或其他资源。 例如,攻击者可以通过提供分号并追加其他值来发起攻击。 这样构造使连接字符串输入的值替换为合法的值。
5.连接字符串配置
5.1 连接字符串本质是字符串,所以可以写在代码中的任意位置,当需要的时候直接引用,但这样不够方便,不利于维护,并且每次修改都需要重新编译代码,性能低,一般不采取。
5.2 在配置文件中存储连接字符串
(1)webform为例:在web.config配置文件中的<configuration/>根节点下的</connectionStrings>添加连接字符串。
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="false" targetFramework="4.0"/> </system.web> <connectionStrings> <add name="connstring" connectionString="Data Source=TERRYCHAN-PC\SQLEXPRESS;Initial Catalog=DBtest;Integrated Security=True"/> </connectionStrings> </configuration>
<?xml version="1.0"?> <configuration> <connectionStrings> <add name="connstring" connectionString="Data Source=TERRYCHAN-PC\SQLEXPRESS;Initial Catalog=DBtest;Integrated Security=True"/> </connectionStrings> </configuration>
6.SqlHelper类
本例使用webform,新建Datebase数据库,在web.config中配置好连接字符串,引入System.Configuration命名空间。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Data.SqlClient; using System.Configuration; /// <summary> ///SqlHelper create by TerryChan 2012-04-17 /// </summary> public class SqlHelper { #region 字段 /// <summary> /// 连接字符串 /// </summary> private readonly static string connectionString = ConfigurationManager.AppSettings["connstring"]; #endregion }