我正在创建一个 C# 应用程序来替换使用 MySQL 数据库的 VB6 应用程序,其中应用程序的多个副本使用相同的数据库。新应用程序必须能够使用当前的 MySQL 数据库,但我也希望它与数据库无关,以便应用程序的未来实例可以使用用户想要的任何服务器。在一个完美的世界中,我希望应用程序在首次运行时向用户显示一个对话框,让他们选择数据库类型(MySQL、SQL Server 等)并指定服务器 ip、用户、密码和数据库姓名。然后,该应用程序将连接到该服务器,如果数据库已经存在,则使用该数据库,如果不存在,则创建一个新数据库。
使用 Code First 我已经了解如何使用现有数据库或创建新数据库,但只能通过在 App.config 文件中对连接字符串进行硬编码。
<add name="GumpIndexDatabase"
connectionString="server=localhost;userid=123;password=123;port=3306;database=gump_new_data;pooling=false;"
providerName="MySql.Data.MySqlClient"
/>
我可以在启动应用程序之前更改连接字符串和提供程序,并且一切都按预期工作。我也可以在启动后更改连接字符串,但不能更改提供程序,并且我必须知道提供程序是 MySQL 还是 MSSQL 才能正确获取连接字符串详细信息(例如:用户或用户 ID)
class GumpIndexDatabase: DbContext
{
public GumpIndexDatabase(string connectionName)
: base(MakeConnectionString(connectionName))
{
}
private static string MakeConnectionString(string connectionName)
{
if (connectionName=MySQL) {
//return MySQL string
} else {
//return SQL Server string
}
}
几个小时的搜索还没有找到如何做这样的事情的例子,所以我怀疑它是不允许或推荐的,即使它看起来很简单。我看过一些关于连接字符串构建器的文章,但不明白如何从通用对象中获取数据库特定的字符串。
所以一个简单的问题:如何在运行时指定数据库连接细节?