想通过字符串来动态创建相应的数据库Connection,已知要用Type.GetType("类名")
但是通过尝试,发现必须通过下面的方法才能创建Connection的Type:
Type type = Type.GetType(@"System.Data.OleDb.OleDbConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");可是里面的Version,Culture,PublicKeyToken这3个值,要如何才能获得呢?为什么不能简单的通过下面的方式创建,或者有没有类似下面的这样简单的创建方式呢:
Type type = Type.GetType(@"System.Data.OleDb.OleDbConnection, System.Data");
但是通过尝试,发现必须通过下面的方法才能创建Connection的Type:
Type type = Type.GetType(@"System.Data.OleDb.OleDbConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");可是里面的Version,Culture,PublicKeyToken这3个值,要如何才能获得呢?为什么不能简单的通过下面的方式创建,或者有没有类似下面的这样简单的创建方式呢:
Type type = Type.GetType(@"System.Data.OleDb.OleDbConnection, System.Data");
lz的实际需求是什么,说出来看看?
这样也行啊。
可是如果考虑到扩展,比如MySqlConnection、还有其它的数据库你说看我的写法,比如:"System.Data.OleDb.OleDbConnection, System.Data"
我希望把它定义在配置文件里
System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll");
Type type = ass.GetType("System.Data.OleDb.OleDbConnection");可是大家的System.Data.dll,不一定是在同一个位置啊。
用反射!!
能否给2行代码?谢谢另外:To 9楼
这个需求纯粹是我自己整出来的,我目前实际的应用是通过switch来创建相应的Connection
就是想看看通过反射怎么实现动态创建。
<add key="CONN:Path" value="C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.OracleClient.dll" />
<add key="CONN:Class" value="System.Data.OracleClient.OracleConnection" />
那么,
System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom(ConfigurationManager.AppSettings["CONN:Path"]);
Type type = ass.GetType(ConfigurationManager.AppSettings["CONN:Class"]);你既然是打算基于配置,那么这些配置信息都是在程序之外的配置文件中的,你的程序要考虑的只是调用,文件在那里,是哪个类,留给负责配置的人来考虑。
看来也是必须要配置路径的
自己想的太多了。