gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:48:13 24 4
gpt4 key购买 nike

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

我需要能够将任何类型的数据库(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com