首页 新闻 搜索 专区 学院

DbProviderFactory.CreateConnection()而得的实例,其连接字符串问题

0
[已解决问题] 解决于 2012-10-17 10:57
 1 public class GenericDatabaseAccessComponent
 2     {
 3         public string ConnectToDatabase()
 4         {
 5             try
 6             {
 7                 DbProviderFactory theFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
 8                 
 9                 ConnectionStringSettings theConnectionStaring =
10                     ConfigurationManager.ConnectionStrings["SqlClientTestDB"];
11 
12                 DbConnection theConnection = theFactory.CreateConnection();
13 
14                // theConnection.ConnectionString = theConnectionStaring.ConnectionString;
15 
16                 theConnection.Open();
17 
18                 if (theConnection.State == System.Data.ConnectionState.Open)
19                     return "Database connection is open.";
20                 else
21                     return "Database connection is open fail without expetion.";
22             }
23             catch (DbException dEx)
24             {
25                 return dEx.Message;
26             }
27             catch (Exception ex)
28             {
29                 return ex.Message;
30             }
31         }
32     }

大侠亲们,
偶是菜鸟,在阅读《ADO.NET 应用程序开发(MCTS)》课程课本时,课本关于“创建泛型的数据库访问连接”提供如上一段代码,请注意没哟第十四行注释状态的DbConnection对象赋值的动作,在执行测试单元时,被提示“ConnectionString属性未初始化”,当释放第十四行代码后功能OK,

此如何理解,是怎么回事,真的是教程漏失,但是跟随该讲课之后有一练习题,肯定了课程原内容是OK的。

DbProviderFactory.CreateConnection()而得的实例,其连接字符串问题到底是依据提供的“提供程序的固定名称”而自动创建,那么其连接字符串的特点数据库信息哪里链接进去的呢?

纠结至极,恳请赐教~~~


 

Goo-Kits的主页 Goo-Kits | 菜鸟二级 | 园豆:206
提问于:2012-10-15 22:47
< >
分享
最佳答案
0

DbProviderFactory.CreateConnection()的确创建了一个DbConnection对象,但是此DbConnection对象的ConnectionString并未指定,所以需要从配置文件中获取数据库的连接信息(第9-10行),这个从配置文件获取的数据库连接信息就是你所说的“连接字符串的特定数据库信息”,所以肯定要有第14行。注:DbConnection对象的连接字符串跟“System.Data.SqlClient”没有半毛钱关系。

之所以教材会通过使用DbProviderFactory工厂类去创建DbConnection对象是为了程序的可扩展性考虑的,真正跟DbProviderFactory有关系的是“System.Data.SqlClient”,如果你把它换成“Oracle.Data.Client”,那么程序将会创建能够连接Oracle数据库的DbConnection,这个时候同样要指定这个DbConnection的ConnectionString。通过DbProviderFactory工厂类,我们无需改动代码只需在配置文件里面进行少量的改动,就很方便的在SqlServer、MySQL、Oracle等数据库之间进行切换。

奖励园豆:5
我不懂爱 | 菜鸟二级 |园豆:246 | 2012-10-16 01:11

明白,感谢指点!

Goo-Kits | 园豆:206 (菜鸟二级) | 2012-10-17 10:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册