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()而得的实例,其连接字符串问题到底是依据提供的“提供程序的固定名称”而自动创建,那么其连接字符串的特点数据库信息哪里链接进去的呢?
纠结至极,恳请赐教~~~
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等数据库之间进行切换。
明白,感谢指点!