存储连接字符串的位置

PJW*_*PJW 5 c# ado.net inheritance connection-string

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

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

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

它有点像鸡和蛋的场景。

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

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

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

Ste*_*eve 3

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

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

public static class DatabaseHelper
{
     public static DbConnectionString {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后客户端应用程序在启动调用期间

DatabaseHelper.DbConnectionString = ConfigurationManager.ConnectionStrings["MyDbCon"].ConnectionString;
Run Code Online (Sandbox Code Playgroud)

在我的图书馆时

public DataTable CustomerTable()
{
    using(SqlConnection cn = new SqlConnection(DataBaseHelper.DbConnectionString))
    ......
}
Run Code Online (Sandbox Code Playgroud)