2009-12-16 82 views
1

我的應用程序需要對用戶指定的連接字符串進行某種查詢。查詢將需要一些參數,所以我在考慮使用DbProviderFactory,並結合myConnection.GetSchema("DataSourceInformation").Rows[0]["ParameterMarkerFormat"]來確定是否需要使用:(Oracle),@(Sql)或?(OleDb)將參數發送到數據庫。如何從用戶指定的連接字符串中檢測提供程序?

要使用DbProviderFactory,我需要找出連接字符串需要提供程序。有沒有一個好的方法來做到這一點,或者我需要使用某種邏輯類型的邏輯嗎? (還是有更好的方式來連接到一個「未知」的數據庫類型?)

注:DbProviderFactory預計提供商將在System.Data.SqlClient形式,而不是SQLNCLI.1這是在實際的ConnectionString。

回答

2

問題是連接字符串只在提供程序的上下文中有意義,而不是其他方式。換句話說,沒有標準來根據字符串來標識提供者。也就是說,通常可以通過使用IndexOf演示來從字符串中推斷提供者。

您可以使用靜態方法DbProviderFactories.GetFactoryClasses()獲取已安裝提供程序的列表。這將爲每個提供者返回一行DataTable。該行將具有「InvariantName」列,它將爲您提供傳遞給DbProviderFactories.GetFactory的正確值。如果您的應用程序設計允許,您可以在獲取連接字符串的同時公開可用提供程序的列表,以便用戶可以指定他們打算建立連接的提供程序。 「名稱」列旨在用於該目的。

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> 
+0

這將如何幫助我檢測哪些提供程序需要連接到用戶在運行時指定的數據庫連接字符串? – Espo 2009-12-16 12:36:22

+0

似乎我誤解了你的問題。我認爲在這種情況下,您需要執行一些自定義if/else邏輯來識別數據庫提供程序。 – Shamika 2009-12-17 03:41:49

相關問題