想通过字符串来动态创建相应的数据库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");

解决方案 »

  1.   

    这种在你编译时就几乎可确定的类型就不用反射创建了吧?conn对象一共就那么几种. 且看你的写法,明显你都已经引用相关的Assmbly了.
    lz的实际需求是什么,说出来看看?
      

  2.   

    Type myType1 = Type.GetType("System.Int32");
    这样也行啊。
      

  3.   

    2楼说得很有道理。这种在你编译时就几乎可确定的类型就不用反射创建了吧?conn对象一共就那么几种. 且看你的写法,明显你都已经引用相关的Assmbly了. 
      

  4.   

     System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom("dllname");            Type type = ass.GetType("classname");
      

  5.   

    是,在目前conn对象一共就那么几种,OracleConnection,OledbConnection,SqlConnection
    可是如果考虑到扩展,比如MySqlConnection、还有其它的数据库你说看我的写法,比如:"System.Data.OleDb.OleDbConnection, System.Data"
    我希望把它定义在配置文件里
      

  6.   

    按这种写法,我要创建Connection,必须要这样:
    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,不一定是在同一个位置啊。
      

  7.   

    如果要写到配置里,那么是什么组件(dll/exe文件名),类名都可以配置,然后取出来动态加载,那也不会有什么问题。可以参考5楼的写法。另外,真要能支持那么多钟数据库,写代码也够吃力的
      

  8.   

    工厂模式下,动态获得dbconnetion类!!
    用反射!!
      

  9.   

    如何动态?
    能否给2行代码?谢谢另外:To 9楼
    这个需求纯粹是我自己整出来的,我目前实际的应用是通过switch来创建相应的Connection
    就是想看看通过反射怎么实现动态创建。
      

  10.   

    假设你要什么conn是配置在app/web.config里的
        <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"]);你既然是打算基于配置,那么这些配置信息都是在程序之外的配置文件中的,你的程序要考虑的只是调用,文件在那里,是哪个类,留给负责配置的人来考虑。
      

  11.   

    谢谢,在我以前认为,System之类的dll应该不用配置路径
    看来也是必须要配置路径的
    自己想的太多了。
      

  12.   

    需不需要配置路径要看你的工程有没有引用它.已经引用的话可以通过fullname来取,否则需要动态加载.
      

  13.   

    一般通过vs创建的项目都引用了System.Data这个dll,但是还是需要配置路径的。