Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#连接到任何数据库?_C#_Mysql_Sql Server_Database Connection - Fatal编程技术网

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

如何从C#连接到任何数据库?,c#,mysql,sql-server,database-connection,C#,Mysql,Sql Server,Database Connection,是否可以在C#中构建与数据库无关的代码,该代码可以针对SQL Server或MySQL工作,只取决于连接字符串 我想我正在寻找一种可以在数据库服务器上抛出SQL并返回一组非常简单的行/列的东西。这个数据库可以是……SQL、MySQL、Access、Filemaker等等。似乎所有数据库都有自己的驱动程序和对象库。SqlConnection与MySqlConnection等 我知道OBDC和OdbcConnection,理论上它可以实现我想要的功能,但我也不想一直在服务器上创建ODBC连接 我的要

是否可以在C#中构建与数据库无关的代码,该代码可以针对SQL Server或MySQL工作,只取决于连接字符串

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

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


我的要求太高了吗?

是的。它是使用
接口
依赖项注入
调用的。你可以在网上找到很多文章和教程来设置这些东西

其思想是基于
接口
编写自己的实现。然后,通过在
IoC
容器中注册要使用的代码,您可以在不更改任何代码的情况下交换这些代码。

查看 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 ();
        }
    }

应该可以使用System.Data.OleDb命名空间中的类,如OleDbConnection、OleDbCommand等。。。
如果您只使用非常基本的sql语句,这应该可以工作。。。您还应该小心地为表定义中的列选择数据类型,因为每个提供程序支持的类型都不同,如果不使用ORM,答案是“否”。我的目标是将SQL作为字符串发送,并返回一个简单的行-列矩阵。这显然是不可能的

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


这不是最优雅的解决方案,但它满足了我的要求。

我当然不是专家,但我非常确定唯一的方法是使用自己的中介来解释/转换语言之间的语法。有很多方法可以实现,例如,抽象工厂模式SQL在整个数据库中并不完全相同。