C#方法返回连接到不同的数据库

时间:2015-01-23 16:04:25

标签: c# database oracle advantage-database-server

UPD: 我有一个静态类用于处理数据库。

此类包含返回连接到数据库的方法。早期此方法返回连接到Advantage数据库(AdsConnection):

static private AdsConnection GetConnection(){
    var conn = new AdsConnection();
    conn.ConnectionString = here my connection string
    return conn;
}

现在,我需要更改此方法。我需要这个方法返回连接到不同的数据库类型(Advantage数据库,Oracle数据库)。

该方法将适用于我班级的公共方法。例如,从数据库中的任何表中获取数据的方法。

public static List<entity1> GetEntities(){}

在这个方法中,我的第一步是解析数据库的类型,然后连接到数据库。然后从数据库获取数据,最后一步是返回数据(List&lt; entity1&gt;)。

在连接数据库的步骤中,我需要使用方法GetConnection("Ads")

此方法返回当前连接到数据库,然后我可以使用此连接进行工作

我改变了方法:

我的第一个版本

static private T GetConnection<T>(string dbType)
        {
            if (dbType.Equals("Oracle"))
            {
                OdbcConnection conn = new OdbcConnection
                conn.ConnectionString = here my connection string
                return (T)conn;
            }

            if (dbType.Equals("Ads"))
            {
                AdsConnection conn = new AdsConnection
                conn.ConnectionString = here my connection string
                return (T)conn;
            }

            return default(T);
        }

但是,我的解决方案不起作用。我有错误:

  1. 无法将类型'System.Data.Odbc.OdbcConnection'转换为'T'
  2. 无法将类型'Advantage.Data.Provider.AdsConnection'转换为'T' 我不知道如何解决我的问题。
  3. 请告诉我如何解决我的问题?

    现在,我使用以下代码(此解决方案给我@khlr):

    static private IDbConnection GetConnection(string dbType)
    {
        if (dbType.Equals("Oracle"))
        {
            OdbcConnection conn = new OdbcConnection
            conn.ConnectionString = here my connection string
            return conn;
        }
    
        if (dbType.Equals("Ads"))
        {
            AdsConnection conn = new AdsConnection
            conn.ConnectionString = here my connection string
            return conn;
        }
    
        return null;
    }
    

    感谢。

2 个答案:

答案 0 :(得分:2)

您可以通过使用ADO.Net的DbProviderFactory来抽象连接实例化的一种方法。您基本上可以将其传递给提供者名称,它将基于提供者提供连接。这基本上减少了对你的dbtype等的检查,我认为当你需要定位多个数据库时它是明智的方法。某些代码段是从MSDN复制的。

在配置文件中,您可以使用不同的数据库类型和提供程序设置多个连接字符串。

<configuration>

         

<add name="NorthwindAccess" 
 providerName="System.Data.OleDb" 
 connectionString=
 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Northwind.mdb;"
/>

然后在您的方法中,您可以执行以下操作:

    static DbConnection CreateDbConnection(
    string providerName, string connectionString)
{
    // Assume failure.
    DbConnection connection = null;

    // Create the DbProviderFactory and DbConnection. 
    if (connectionString != null)
    {
        try
        {
            DbProviderFactory factory =
                DbProviderFactories.GetFactory(providerName);

            connection = factory.CreateConnection();
            connection.ConnectionString = connectionString;
        }
        catch (Exception ex)
        {
            // Set the connection to null if it was created. 
            if (connection != null)
            {
                connection = null;
            }
            Console.WriteLine(ex.Message);
        }
    }
    // Return the connection. 
    return connection;
}

答案 1 :(得分:1)

您可以执行以下操作,因为两个连接都从IDbConnection继承:

static private IDbConnection GetConnection(string dbType)
{
    if (dbType.Equals("Oracle"))
    {
        OdbcConnection conn = new OdbcConnection
        conn.ConnectionString = here my connection string
        return conn;
    }

    if (dbType.Equals("Ads"))
    {
        AdsConnection conn = new AdsConnection
        conn.ConnectionString = here my connection string
        return conn;
    }

    return null;
}