c# - 通用数据库连接 C#

标签 c# mysql sql database

我正在开发这个应用程序,它将数据从数据库传输到另一个应用程序。但我正在尝试让数据库功能正常工作。

我需要能够将任何类型的数据库(Oracle、SQL 等)连接到应用程序,因为我的用户群使用不同的数据库。

我正在学习 http://www.splinter.com.au/using-generic-database-providers-with-c/ 上的教程我无法将我的测试 MySQL 数据库连接到它。

这是我的示例代码:

static void Main(string[] args)
{
    string connection = "SERVER=localhost;UID=root;PASSWORD=toor";
    string provider = "MySql.Data.MySqlClient";

    using (DbConnection conn = (DbConnection)Activator.CreateInstance(Type.GetType(provider), connection))
    {
        conn.Open();
        string sql = "SHOW DATABASES";
        using(DbCommand comm = conn.CreateCommand())
        {
            comm.CommandText = sql;
            using(DbDataReader reader = comm.ExecuteReader())
            {
                while(reader.Read())
                {
                    string owner = reader.GetString(0);
                    Console.WriteLine("{0}", owner);
                }
            }
        }
    }
    Console.ReadLine();
}

我遇到的错误是 ArgumentNullException,我可以在调试器中看到 conn 为空。我不确定为什么它不起作用。我在使用 MySQL 库的应用程序中使用了该连接字符串和提供程序。难道是我的连接字符串需要更改?如果是这样,我应该将其更改为什么?

此外,我不想将数据库添加到稍后选择的连接字符串。

最佳答案

我猜 Type.GetType(provider) 返回 null 因为你指定了类型的全名

"MySql.Data.MySqlClient"

而不是它的 AssemblyQualifiedName

"MySql.Data.MySqlClient, MySql.Data"

仅当类型在当前执行的程序集或 mscorlib 中时,指定不带程序集名称的类型名称才有效。

如果您尝试从 GAC 加载程序集,您还必须包含 Version、Culture 和 PublicKeyToken 参数,即:

"MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"

这取决于驱动程序的版本。

关于c# - 通用数据库连接 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21705306/

相关文章:

c# - 具有通用存储库的 DbContextScope

MySQL - EER 表中的双主键

php - Eloquent 多态关系热切加载

Python 将变量放入 sql FROM 语句中

c# - 为什么 Selenium InternetExplorerDriver Webdriver 在 Debug模式下非常慢(visual studio 2010 和 IE9)

c# - 反编译器如何识别编译常量?

c# - 为什么函数指针不被认为是面向对象的?

mysql - 如果空字符串不等于具有字符串值的 MySQL 列,则比较空字符串

php - 优化MySQL近匹配查询

mysql - 选择一个区间的几个平均值