存储连接字符串的位置

时间:2013-06-09 10:20:40

标签: c# inheritance ado.net connection-string

我正在创建一个类库,其中包含我在我开发的应用程序中经常使用的所有自定义类。这个库在我的每个应用程序中编译并添加为Reference,使我能够调用库中包含的自定义类。

我的库中的自定义类包含多层继承,但最终都源于我称之为“Alpha”的基类。在那个类中,我还保存了我的连接字符串,以便它被库中的所有其他类继承。许多类都大量使用ADO与SQL数据库进行通信,因此必须为所有类提供连接字符串。

我遇到的问题是,我想要使用我的类库的每个应用程序都有自己的数据库,因此需要一个独特的连接字符串。因此,连接字符串不能包含在我的类库中,因为这意味着我使用我的类库的所有应用程序都将查找相同的SQL数据库。但是,如果我从'Alpha'类中删除连接字符串,那么类库将无法编译,因为所有使用ADO.NET的方法都在寻找该连接字符串。

它有点像鸡蛋和鸡蛋的情景。

即。我需要Alpha类中的连接字符串才能编译类库。 即连接字符串不能在类库中,因为我需要它对每个应用程序都是唯一的

我能想到的唯一解决方案是给我的类库中的每个方法使用ADO,一个参数来保存连接字符串,然后可以从应用程序代码传入。但这似乎不是克服这个问题的一种非常简洁的方式。

理想情况下,我想要的是每个应用程序中存储连接字符串的单个位置。然后我需要某种方式在我的类库中引用这个位置,即使在编写我的类库时该位置将不可用(因为它位于各个应用程序中)。

2 个答案:

答案 0 :(得分:2)

通常连接字符串是应用程序生命周期的常量,因此您可以从实际应用程序的app.config中提取它,并要求使用您的库,客户端应用程序将此字符串传递给您的库。

所以我决定在我的库中创建一个全局帮助器类,我存储从客户端应用程序传递的连接字符串,然后我的内部libary方法使用这个全局属性来读取连接。

public static class DatabaseHelper
{
     public static DbConnectionString {get;set;}
}

然后客户端应用程序在其启动时调用

DatabaseHelper.DbConnectionString = ConfigurationManager.ConnectionStrings["MyDbCon"].ConnectionString;

在我的图书馆

public DataTable CustomerTable()
{
    using(SqlConnection cn = new SqlConnection(DataBaseHelper.DbConnectionString))
    ......
}

答案 1 :(得分:0)

感谢史蒂夫的评论(接受我的回答),我能够解决这个问题。但是我认为如果对其他人有帮助的话,我会包括我的代码改编:

在我的班级图书馆

public static class Alpha
{    
    public static string ConnectionString { get; set; }

    public static SqlConnection DatabaseConnection()
    {            
        SqlConnection linkToDB = new SqlConnection(ConnectionString);
        return linkToDB;
    }

然后在我的库中的整个类中使用linkToDB。

然后在WinForms应用程序中,我在启动登录的Load事件中设置连接字符串,如下所示:

private void LoginInForm_Load(object sender, EventArgs e)
{
    Alpha.ConnectionString = @"...connection string goes here...";
}
相关问题