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);
}
但是,我的解决方案不起作用。我有错误:
请告诉我如何解决我的问题?
现在,我使用以下代码(此解决方案给我@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;
}
感谢。
答案 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;
}