首页 文章

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

提问于
浏览
1

我的应用程序需要针对用户指定的连接字符串执行某个查询 . 查询将需要一些参数,所以我考虑使用DbProviderFactory,结合 myConnection.GetSchema("DataSourceInformation").Rows[0]["ParameterMarkerFormat"] 来查明我是否需要使用 : (Oracle), @ (Sql)或 ? (OleDb)将参数发送到数据库 .

要使用DbProviderFactory,我需要找出连接字符串需要什么Provider . 有没有一个好方法,或者我需要使用某种 if(conStr.indexOf("oledb") != -1) { type = DbTypes.OleDB; } 逻辑? (或者有更好的方法来连接到"unknown"数据库类型吗?)

注意:DbProviderFactory期望提供程序的形式为 System.Data.SqlClient ,而不是实际连接字符串中的 SQLNCLI.1 .

2 回答

  • 2

    问题是连接字符串只在提供者的上下文中有意义而不是相反 . 换句话说,没有基于字符串识别提供者的标准 . 也就是说,您通常可以使用IndexOf来演示字符串中的提供程序 .

    您可以使用静态方法DbProviderFactories.GetFactoryClasses()获取已安装的提供程序列表 . 这将返回一个DataTable,每个提供程序都有一行 . 该行将具有“InvariantName”列,该列将为您提供传递给DbProviderFactories.GetFactory的正确值 . 如果您的应用程序设计允许,您可以在获取连接字符串的同时公开可用提供程序列表,以便您的用户可以指定他们打算 Build 连接的提供程序 . “名称”列旨在用于此目的 .

  • 0

    您需要在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>
    

相关问题