如何从C#连接到任何数据库?

时间:2013-11-13 20:36:20

标签: c# mysql sql-server database-connection

是否有可能在C#中构建与SQL Server或MySQL无关的数据库无关代码,具体取决于连接字符串?

我想我正在寻找能够在数据库服务器上抛出SQL的东西,并返回一组非常简单的行/列。这个数据库可能是...... SQL,MySQL,Access,Filemaker等等。似乎所有数据库都有自己的驱动程序和对象库。 SqlConnection与MySqlConnection等。

我知道OBDC和OdbcConnection,它理论上可以做我想要的,但我不想一直在服务器上创建ODBC连接。

我在这里要求的太多了吗?

4 个答案:

答案 0 :(得分:5)

看一看 NHibernate,LLBLGEN,MyGeneration,NetTiers和其他ORM。

他们可能允许你做一些你需要的抽象。有些是免费的,有些是免费的。

我个人喜欢NHibernate。

你可以使用像gleng这样的接口来做上面的事情:

public static IDbDataAdapter GetDataAdapter (Database db)
    {
        switch (db)
        {
            default:
            case "MsSql":
                return new SqlDataAdapter ();
            case "MySql"
                return new MySqlDataAdapter ();
        }
    }

    public static IDbCommand GetCommand (Database db)
    {
        switch (db)
        {
            default:
            case "MsSql":
                return new SqlCommand ();
            case "MySql"
                return new MySqlCommand ();
        }
    }

答案 1 :(得分:2)

是。使用interfacesDependency Injection调用它。你可以在网上找到许多文章和教程来设置这些内容。

您的想法是根据interface编写自己的实现。然后,您可以通过在IoC容器中注册要使用的代码来交换这些代码,而无需更改任何代码。

答案 2 :(得分:0)

应该可以使用 System.Data.OleDb 命名空间中的类,如OleDbConnection,OleDbCommand,... 如果你只使用非常基本的sql语句,这应该有用......你也应该小心选择表定义中列的数据类型,因为每个提供者支持的类型会有所不同

答案 3 :(得分:0)

不使用ORM,答案是“不”。我的目标是将SQL作为字符串发送,并返回一个简单的行列矩阵。这显然是不可能的。

我最终编写了自己的对象,它接受了数据库类型的字符串和枚举,然后它使用switch语句来使用各种对象库进行连接。我在静态编译了库。

不是最优雅的解决方案,但它做了我想要的。