#1 connectionString放在什么地方
首先肯定放在web.config里面,原因不多说了
有两个地方
1 appSetting小节?
2 connectionStrings小节?
1 appSetting小节?
调用方法
ConfigurationManager.AppSettings[""].ToString()
这里只是保存了一个字符串,没有其他东西
读取的时候也可以用ConfigurationSettings像asp.net1.1一样,不过MS说这个过时的方法
这是asp.net1.1的做法
2 connectionStrings小节?
调用方法
ConfigurationManager.ConnectionStrings[""].ConnectionString
在这里定义的ConnectionString可以直接被各种数据源控件如SqlDataSource通过如 <%$ ConnectionStrings:Pubs.ProviderName %>调用,显然更强大
它是如何做到的?
这里定义name和字符串的同时,还可以定义Provider
Provide默认一般设置为System.Data.SqlClient,它是个什么东西?
开始以为这个表示System.Data.SqlClient命名空间,感觉语法很奇怪,后来研究半天,这里只不过是一个字符串,利用了命名空间的名称而已,没有任何实际意义,删掉或者该成其他的值都可以,但也不是完全没有用处,在使用数据工厂的时候需要他,这个字符串是一个约定
关于数据库工厂:
一般来说在我们的数据库通用类里面读取web.config里面的参数(比如连接字符串),然后使用SqlConnection SqlCommand等操作,这样很明显需要为每种不同的数据库编写不同的程序,PetShop里面就是这么实现的,它分别实现了SqlHelper和OracleHelpe人两个类,为了适应这两个数据库访问类,还分别实现了不同的dal层,这其实不是很好的解决办法(asp.net1.1沿用下来的),asp.net2.0还有更简单的方法,就是使用数据库工厂
首先要创建一个工厂,这个工厂之后会负责创建需要的Connection Command等
DbProviderFactory dbFactory = DbProviderFactories.GetFactory(“”); 需要传入一个字符串,就是ProvideName的东西了,比如System.Data.SqlClient
这里就可以这么写:
private static DbProviderFactory dbFactory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ProviderName); //用到ProviderName了
public static void ttt1()
{
DbConnection conn = dbFactory.CreateConnection();
DbCommand cmd = dbFactory.CreateCommand();
}
这样得到的conn cmd就是通用的了,加入上面定义的是System.Data.SqlClient,其实这里就得到SqlConnection和SqlCommand
关于找不到ConfigurationManager的错误
有时候会死活找不到ConfigurationManager类,这是因为asp.net2.0中有好几个System.Configuration类...汗,因为有的是兼容1.1的,所以会这样,比如新建了一个项目,需要手动添加应用System.Configuration.dll,然后才能用到ConfigurationManager,否则系统默认使用asp.net1.1的东西
为了使用asp.net2.0的强大功能.....我把ConnectionStrings都放在这里