代码之家  ›  专栏  ›  技术社区  ›  Espo

如何从用户指定的连接字符串检测提供程序?

  •  1
  • Espo  · 技术社区  · 15 年前

    我的应用程序需要对用户指定的ConnectionString执行特定的查询。查询将需要一些参数,因此我考虑结合使用dbproviderFactory myConnection.GetSchema("DataSourceInformation").Rows[0]["ParameterMarkerFormat"] 找出我是否需要使用 : (甲骨文) @ (SQL)或 ? (OLEDB)将参数发送到数据库。

    要使用DBProviderFactory,我需要找出ConnectionString需要什么提供程序。有没有好的方法,或者我需要使用某种 if(conStr.indexOf("oledb") != -1) { type = DbTypes.OleDB; } 逻辑?(或者是否有更好的方法连接到“未知”数据库类型?)

    注意:DBProviderFactory希望提供程序的格式为 System.Data.SqlClient ,而不是 SQLNCLI.1 在实际的ConnectionString中。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Jacob Proffitt    14 年前

    问题是连接字符串只在提供程序的上下文中有意义,而不是相反。换句话说,没有根据字符串识别提供者的标准。也就是说,通常可以从字符串中推断提供程序,正如使用indexof所演示的那样。

    可以使用静态方法dbProviderFactories.getFactoryClasses()获取已安装提供程序的列表。这将返回一个数据表,其中每个提供程序都有一行。该行将具有“InvariantName”列,该列将为您提供传递给dbProviderFactories.getFactory的正确值。如果应用程序设计允许,可以在获取连接字符串的同时公开可用提供程序的列表,以便用户可以指定他们要建立连接的提供程序。“名称”栏就是为了这个目的。

        2
  •  0
  •   Shamika    15 年前

    您需要在app.config文件中指定。来自MSDN,

    <configuration>
      <connectionStrings>
        <clear/>
        <add name="NorthwindSQL" 
         providerName="System.Data.SqlClient" 
         connectionString=
         "Data Source=MSSQL1;Initial Catalog=Northwind;Integrated Security=true"
        />
    
        <add name="NorthwindAccess" 
         providerName="System.Data.OleDb" 
         connectionString=
         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Northwind.mdb;"
        />
      </connectionStrings>
    </configuration>