问题症状:VS.NET2005 中,数据库连接字符串可在设计阶段,在“项目-属性-设置Setting”中定义,以提供给数据源连接,特别适合于设计阶段的数据绑定。然而,出于操作系统用户权限的考虑,微软将数据库连接ConnectionString强制为全局性Application类型,而非用户User类型。全局性Application类型的设置Setting,是只读的,这就意味着数据库连接参数,必须在设计阶段明确知道,且软件发布后是不能修改的。显然,这是不现实的。比如客户的Sql Server的IP、帐号、密码、数据库名一旦与开发者所设定的不一致,必须导致数据库的无法访问。
问题思考:Application的Setting的只读,其实是指不能保存到磁盘文件,而非不能更改其内存值。我们可以借助一个User类的Setting来保存到磁盘,而在加载、更新User Setting时,自动更新Application Setting的内存值。
解决方法:
1、在设置中,添加一个Application类的数据库连接,假设名为“SqlConnString”;
2、在设置中,添加一个User类的数据库连接字符串,假设名为“UserSqlConnString”;
3、在设置窗口中,点击“查看代码”,并添加/修改其代码为:
Namespace My
Partial Friend NotInheritable Class MySettings
'当UserSqlConnString值被更改时,自动更新SqlConnString值。
Private Sub MySettings_PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Handles Me.PropertyChanged
Select Case e.PropertyName
Case "UserSqlConnString"
Me("SqlConnString") = My.Settings.UserSqlConnString.ToString
My.Settings.Save()
End Select
End Sub
'当UserSqlConnString值被加载时,自动更新SqlConnString值。
Private Sub MySettings_SettingsLoaded(ByVal sender As Object, ByVal e As System.Configuration.SettingsLoadedEventArgs) Handles Me.SettingsLoaded
Me("SqlConnString") = My.Settings.UserSqlConnString.ToString
End Sub
End Class
End Namespace
以后再也不用担心Application的“只读”了。“数据绑定”以后可以派上用场了。