我目前正在构建一个程序,需要大量员工才能使用我的程序,程序位于网络上的共享驱动器上,因此所有用户都可以访问该程序。在我的程序中,我有一个数据库,我用它来管理所有用户帐户和其他信息。当您第一次在网络上运行该程序时,它会询问管理员在何处创建数据库。程序创建数据库后,我将连接字符串保存到程序中的类模块中的字符串变量。但是,一旦我退出程序,我设置为类中的字符串变量的值将被删除。有没有办法防止字符串在关闭程序后丢失其值?我知道我可以通过my.settings这样做,但我不想这样做。
答案 0 :(得分:0)
您可以使用二进制序列化程序创建自己的设置文件。
此方法可用于将设置类的实例存储到文件中,该文件不是人类可读的。如果需要人类可读性和可编辑性,则可以使用xml序列化程序。设置文件将驻留在应用程序目录中。您可以使用变量settingsFileName
控制此项。
创建一个新的控制台应用程序并粘贴下面的代码。运行它几次并注意"连接字符串"通过申请关闭和开放持续存在。
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary
Module Module1
Private settingsFileName As String = "Settings.bin"
Private mySettingsClass As SettingsClass
Private Sub loadSettings()
Dim formatter As New BinaryFormatter()
If File.Exists(settingsFileName) Then
Using stream As New FileStream(settingsFileName, FileMode.Open)
mySettingsClass = CType(formatter.Deserialize(stream), SettingsClass)
End Using
Else
Using Stream As New FileStream(settingsFileName, FileMode.CreateNew)
mySettingsClass = New SettingsClass()
formatter.Serialize(Stream, mySettingsClass)
End Using
End If
End Sub
Private Sub saveSettings()
Dim formatter As New BinaryFormatter()
If File.Exists(settingsFileName) Then
Using stream As New FileStream(settingsFileName, FileMode.Truncate)
formatter.Serialize(stream, mySettingsClass)
End Using
Else
Using stream As New FileStream(settingsFileName, FileMode.CreateNew)
formatter.Serialize(stream, mySettingsClass)
End Using
End If
End Sub
<Serializable>
Public Class SettingsClass
Public Property ConnectionString As String = ""
End Class
Sub Main()
Console.WriteLine("Loading settings...")
loadSettings()
Dim connectionString = mySettingsClass.ConnectionString
Console.WriteLine("Connection string: ""{0}""", connectionString)
Console.WriteLine("Enter new connection string...")
mySettingsClass.ConnectionString = Console.ReadLine()
Console.WriteLine("Saving settings...")
saveSettings()
Console.WriteLine("Done!")
Console.ReadLine()
End Sub
End Module
向SettingsClass
添加其他属性,可以在应用程序的其他位置使用。