2

我有一个应用程序允许我的用户对他们选择的数据库运行查询。数据库可以是 SQL 服务器或 Oracle。此方法接受另一个类的两个参数,第一个参数是用户选择的数据库的连接字符串,第二个参数是数据库类型。那部分工作正常。我要做的是减少我需要编写的代码,而不是一遍又一遍地输入查询和连接的东西。所以,我想做这样的事情。显然这不起作用,但我对大多数解决方案持开放态度。

public void createTable(string connectstring, string rdbms)
{
    if (rdbms == "oracle")
    {
        con = new OracleConnection(connectionString);
        con.Open();
        OracleCommand query = con.CreateCommand();
    }
    else if (rdbms == "SQL Server")
    {
        con = new SqlConnection(connectionString);
        con.Open();
        SqlCommand query = con.CreateCommand();
    }
    else 
    {
      // broke
    }

    query.CommandText = "CREATE TABLE " + RndName + 
       " (Col0 Varchar(10),Col1 Varchar(10), Col2 Varchar(10))";
    query.ExecuteNonQuery();

    con.Close();
    executeInsertTransactions(connectstring);
}
4

3 回答 3

2

您可以通过利用框架DbProviderFactory并使用获得的Db*类来创建更多抽象代码。

于 2013-06-04T01:01:56.027 回答
2

这个问题一般通过接口来解决。可能有这些通用接口:

IConnection IDataProvider IRepository

使用 MySql 数据库实现接口,例如类 MySqlConnection : IConnection。对于 Oracle,添加类 MsOracleConnection : IConnection。

理想情况下,您应该将所有功能抽象为通用接口。您必须为要支持的每个数据库/存储引擎提供实现。在运行时,您将使用 IoC 容器和 DI 原理来设置当前实现。所有子依赖项将使用作为参数传递给构造函数(或属性或方法)的接口

于 2013-06-04T00:36:28.907 回答
0
Dim con As System.Data.IDbConnection
Dim cmd As System.Data.IDbCommand                        
                       Select Case ConDBType
                            Case TypeDatabase.SqlServer
                                con = New OleDbConnection(CN.ConnectionString)
                                cmd = New OleDbCommand
                            Case TypeDatabase.MySql
                                con = New MySqlConnection(CNMySql.ConnectionString)
                                cmd = New MySqlCommand
                            Case TypeDatabase.Access
                                Call InitNameing()
                                ConDBAccess.DataSource = PreparToRootNameing() & "\T" & NAME_SYSTEMDB
                                con = New OleDbConnection(CN.ConnectionString)
                                cmd = New OleDbCommand
                       End Select
                       cmd.Connection = con
                       con.Open()
                       cmd.CommandText = SQLUpdate
                       cmd.ExecuteNonQuery()
于 2014-08-29T06:40:07.927 回答