保存数据的替代方法比VB.Net的my.settings

时间:2015-04-14 18:32:40

标签: database vb.net

我需要为Windows窗体应用程序保存大约 1600条不同的信息

最好的方法是什么?例如,某些用户设置看起来像measuringItem1NamemeasuringItem1EquationmeasuringItem1EnabledmeasuringItem1OffsetmeasuringItem2Name ......

我已经查看了my.settings,但是,我发现输入每个用户设置会非常繁琐且容易出错。

似乎最好的解决方案是拥有一种可以访问每个单独的单元格并编辑该信息的表格。

这样的事情存在吗?如果是这样,如何用 VB.Net 实现它?

2 个答案:

答案 0 :(得分:2)

我建议创建一个包含属性的类来保存您的设置。将该类标记为可序列化。然后将此类的实例序列化和反序列化为应用程序启动/关闭到用户的配置文件目录。这将允许您具有强类型设置,如果您需要该选项,则按用户单独保存。它还允许您轻松设置设置的默认值。

您可以进行"设置"类所需的深度,属性由其他子设置类或索引设置列表组成。这是一个非常强大的模式。

例如:

settings.MeasuringItem(1).Enabled = True
settings.MeasuringItem(1).Equation = "1+1"
settings.MeasuringItem(1).Offset = 15

settings.MeasuringItem(2).Enabled = True
settings.MeasuringItem(2).Equation = "1+1"
settings.MeasuringItem(2).Offset = 15

Settings是主要设置类,其上包含Generic.List(of MeasuringItem)属性。 MeasuingItem是另一个包含.Enabled As Boolean.Equation as string等属性的类。

我还没有真正检查过这个错误。你会想要做更多的安全检查,但这应该让你开始。

<Serializable>
Public Class Settings

    Public Sub New()
        _measuringItems = New List(Of MeasuringItem)
    End Sub

    Private _measuringItems As List(Of MeasuringItem)
    Public ReadOnly Property MeasuringItems As List(Of MeasuringItem)
        Get
            Return _measuringItems
        End Get
    End Property

    Public Sub Save()
        Using s As New IO.FileStream("Path to save", IO.FileMode.Create)

            Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            formatter.Serialize(s, Me)
        End Using
    End Sub

    Public Shared Function Load() As Settings
        Dim settings As Settings = Nothing

        Using s As New IO.FileStream("Path to load", IO.FileMode.Open)

            Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            settings = CType(formatter.Deserialize(s), ServerHost.Settings)
        End Using
        Return settings
    End Function


End Class

<Serializable>
Public Class MeasuringItem
    Public Property Enabled As Boolean = True 'These are the default values
    Public Property Equation As String = "1+1"
    Public Property Offset As Integer = 15
End Class

一个快速使用示例:

    'Create a completely new settings instance with 100 measuring items
    Dim settings1 As Settings = New Settings
    For i As Integer = 1 To 100
        settings1.MeasuringItems.Add(New MeasuringItem)
    Next
    settings1.MeasuringItems(0).Enabled = False
    settings1.MeasuringItems(5).Equation = "testing"

    'Save it
    settings1.Save()

    'load the saved settings
    Dim settings2 As Settings = Settings.Load

答案 1 :(得分:0)

我建议使用数据库来存储值。我不知道你的操作环境(例如,我有几个企业SQL服务器供我使用。)你可以使用SQL Express Edition,免费。 SQL Lite也是一种选择。您甚至可以使用Access,但这需要安装MS Office。

如果您不想使用数据库路由,可以创建一个设置类,并使该类可序列化。这会将对象序列化为二进制文件或XML文件(取决于你如何设置它。)如果你想采用这种方法,我会为你发布代码。