我这样做的方法是保存一个 XML 文件,该文件从具有 SQL 连接信息的 POCO 对象序列化到隔离存储中。由于可以从那里读取和写入的用户帐户没有真正的限制,因此您不必担心用户权限。
然后我修改了设置事件,以便在从应用程序设置文件中读取连接字符串属性时,我改为在隔离存储中反序列化 XML 文件,构建连接字符串,然后将其放入应用程序设置连接字符串属性中。由于我在设置类本身中执行此操作,因此我能够写入它(但不能保存回文件)。
当我的应用程序运行时,如果它无法连接到服务器,我只会弹出一个窗口询问 sql server 信息,然后他们将其输入并将其保存到隔离存储中,永远不会再次询问他们(即使通过升级)。
如果您有客户端应用程序(WPF 或 WinForms),其他机器上的用户将无法使用它,坦率地说,您可能找不到解决方案,除非您研究 .Net Remoting 或类似性质的东西。但是,如果您在 WinForms 应用程序中的同一台计算机上有多个用户,则可以使用 IsolatedStorage,它将适用于所有用户。
在设置类中,添加此事件处理程序:
VB:
Private Sub MySettings_SettingsLoaded(ByVal sender As Object, ByVal e As System.Configuration.SettingsLoadedEventArgs) Handles Me.SettingsLoaded
Me.Item("MyAppConnectionString") = MyLibrary.BuildConnectionString()
End Sub
C#:
protected override void OnSettingsLoaded(object sender, System.Configuration.SettingsLoadedEventArgs e)
{
base.OnSettingsLoaded(sender, e);
this["MyAppConnectionString"] = MyLibrary.BuildConnectionString();
}