【发布时间】:2015-05-04 22:30:25
【问题描述】:
我的目标是创建一个 DLL,该 DLL 可以与几个不同的程序一起使用,这些程序将返回 MySqlConnection 对象。这样,如果凭据发生变化,只需在一处进行修改。
现在我可以从项目中包含的另一个 C# 文件中成功获取我的 MySqlConnection 对象,但是当我尝试从我的 DLL 中检索它时,我收到以下错误:
未处理的异常:System.InvalidOperationException:连接必须有效 并打开。
谁能发现我的代码或逻辑中的错误?有没有更好的方法来实现这一点?提前致谢!
我的 DLL 代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//For MySql connections
using MySql.Data.MySqlClient;
namespace LinMySqlConnections
{
public class MySqlMain
{
public static MySqlConnection OpenConnection()
{
string server = "database.address";
string database = "databaseName";
string user = "dbUser";
string pass = "dbPass";
string connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" +
user + ";" + "PASSWORD=" + pass + ";";
MySqlConnection connection = new MySqlConnection(connectionString);
return connection;
}
}
我的主要代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using LinMySqlConnections;
namespace ODSTesting
{
class Program
{
static void Main(string[] args)
{
MySqlConnection mainDB = LinMySqlConnections.MySqlMain.OpenConnection();
if (mainDB != null)
{
string query1 = "SELECT * FROM table";
MySqlCommand cmd = new MySqlCommand(query1, mainDB);
MySqlDataReader dataReader = cmd.ExecuteReader();
}
else
Console.WriteLine("mainDB was null dude");
}
}
}
【问题讨论】:
-
连接未打开 connection.Open();
-
从阅读错误信息开始。它告诉你你没有打开的连接。
cmd.Connection.Open();下次使用谷歌 -
@AndreyBelykh,谢谢!我在包含的文件中有 .Open() ,但在将其移动到 DLL 时忽略了这一点。这解决了问题 - 如果您将其作为答案发布,我会将其标记为正确。
-
这个 dll 是否只是为了在连接字符串发生变化的情况下提供一种更改单个事物的方法?如果是这样,为什么不简单地将它(或者更好的是,它的组件)存储在某个文件中,以便程序从那里简单地读取它?你甚至不必以这种方式重新编译任何东西。
-
是的,这是主要目的。不必重新编译会更方便,但如果凭据位于已编译的 DLL 中而不是纯文本文件,难道不是更安全吗?