65.9K
CodeProject 正在变化。 阅读更多。
Home

如何轻松更改 ConnectionString

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.20/5 (10投票s)

2010 年 2 月 6 日

CPOL

2分钟阅读

viewsIcon

54137

像 C# 中的属性一样更改 ConnectionString

引言

每个在数据库领域开始一个实际项目的人都会面临连接字符串更改的麻烦。对于不需要更改数据库位置的小型项目,更改连接字符串不是问题,但在更大的项目中,特别是在应用程序打包时,连接字符串会令人头疼。

我一直在寻找一种在运行时更改连接字符串的简单方法。互联网上有很多技巧,但每种方法都有副作用。

在本文中,我将向您展示如何在运行时像一个普通的属性一样更改连接字符串。

使用代码

在 .Net 编程中,通常我们不改变 Settings 类。这个类保存了连接字符串的只读属性。通过一种神奇的方法,我们可以更改 Settings 类中的连接字符串。

首先,我们在 Settings 类中创建一个用户范围的字符串属性:

[global::System.Configuration.UserScopedSettingAttribute()]
public string ConnectionString
{
    get { return (string)this["ConnectionString"]; }
    set { this["ConnectionString"] = value; }
}
此属性在运行时保存连接字符串。有一些事件可以用来更改主连接字符串,PropertyChangedSettingsLoadedPropertyChanged 在每次类中任何属性的值发生更改时触发,而 SettingsLoaded 在程序设置的加载过程完成时触发。我们在 Settings 类的构造函数中创建两个事件处理程序。 请注意,没有构造函数,构造函数也应该被编码。
public Settings()
{
    this.PropertyChanged += 
      new System.ComponentModel.PropertyChangedEventHandler(this.Settings_PropertyChanged);
    this.SettingsLoaded += 
      new System.Configuration.SettingsLoadedEventHandler(this.Settings_SettingsLoaded);
}
此外,我们创建两个处理程序
private void Settings_PropertyChanged(System.Object sender,
         System.ComponentModel.PropertyChangedEventArgs e)
{
    if (e.PropertyName == "ConnectionString")
    {
        this["Original_ConnectionString"] = this.ConnectionString;
    }
}

private void Settings_SettingsLoaded(System.Object sender,
        System.Configuration.SettingsLoadedEventArgs e)
{
    // Advanced codes for post loading process...
}
Original_ConnectionString 是您程序中要更改的主连接字符串。现在,在您的代码中的任何地方,您可以为 ConnectionString 分配一个新的连接字符串,这将是您的新连接字符串。此外,您可以定义一个函数来完成这项工作。 定义该函数的一个好地方是在 Program 类中。 您可以使用像这样的函数
public static void ChangeConnectionString(string connectionstring)
{
    global::[project_namespace].Properties.Settings.Default.ConnectionString = 
        connectionstring;
}
通过调用该函数并将连接字符串传递给它,您可以轻松地更改连接字符串。 就是这样!!!

关注点

如果您使用 SettingsLoaded,您可以做更多的事情,并且可以拥有更灵活的代码。 我把它们留给你自己探索!

© . All rights reserved.