gpt4 book ai didi

database - 来自数据库的 Winforms 数据跨多种形式

转载 作者:搜寻专家 更新时间:2023-10-30 23:27:16 24 4
gpt4 key购买 nike

我有一个 winforms 应用程序,它有一个 ms sql server 后端。在我的数据库中,我有类似状态的查找表,以及数据很少更改的其他表。在我的应用程序中,多个表单可能使用相同的查找表(其中一些包含大量数据)。不是每次打开表单时都加载/填充数据,而是有一种方法可以缓存数据库中的数据,可以从多个表单访问这些数据。我做了一些搜索,但找不到最佳解决方案。有缓存、字典等。什么是最好的解决方案,你能给我指出讨论它的文档吗?甚至可能有一个例子。

编辑:在我原来的帖子中,我没有提到我有一个强类型数据集并使用了表适配器。我想在我的应用程序启动时预加载我的查找表,然后让这些数据集表在整个应用程序中用于多个表单,而不必在每个表单上都填写它们。

我试过创建一个类:

Public Class dsglobal

Public Shared EML_StaffingDataSet As EML_StaffingDataSet

Public Shared Sub populateDS()
EML_StaffingDataSet = New EML_StaffingDataSet
End Sub

Public Shared Sub loadskills()
Dim ta As New EML_StaffingDataSetTableAdapters.TSTAFFSKILLTableAdapter
ta.Fill(EML_StaffingDataSet.TSTAFFSKILL)
End Sub

End Class

当我的应用程序启动时,我在后台工作程序上运行它。所以它加载数据集表。填充时,我可以看到数据表中有数据。当我打开一个表单时,我想使用数据集表,但它似乎清除了数据。不确定我的方法是否正确或我的错误在哪里。

编辑2:我也根据评论尝试过此操作,但不确定我是否正确执行。如果我做得正确,那么我如何在设计时将其用作数据源,我只能以编程方式进行吗?

Public Module lookupdata
Private EML_StaffingDataSet As EML_StaffingDataSet

Private skillvalues As List(Of skill)

Public ReadOnly Property skill As List(Of skill)
Get
If skillvalues Is Nothing Then
getskillvalues()
End If
Return skillvalues
End Get
End Property

Private Sub getskillvalues()
skillvalues = New List(Of skill)
EML_StaffingDataSet = New EML_StaffingDataSet
Dim ta As New EML_StaffingDataSetTableAdapters.TSTAFFSKILLTableAdapter
ta.Fill(EML_StaffingDataSet.TSTAFFSKILL)

For Each row As DataRow In EML_StaffingDataSet.TSTAFFSKILL
Dim skill As New skill
skill.skill_id = row("skill_id")
skill.skill_desc = row("skill_desc")
skill.skill_open_ind = row("skill_open_ind")
skillvalues.Add(skill)
Next
End Sub

End Module

Public Class skill
Public Property skill_id As Integer
Public Property skill_desc As String
Public Property skill_open_ind As Boolean
End Class

最佳答案

您可能需要考虑延迟加载模式,如下所示:

Public Module LookupData
Private statusValues As List(Of LookupValue)

Public Readonly Property Statuses As List(Of LookupValue)
Get
If statusValues Is Nothing Then
GetStatusValues()
End If

Return statusValues
End Get
End Property

Private Sub GetStatusValues()
statusValues = New List(Of LookupValue)

Dim sql = "select key, value from StatusTable"

'TODO: Read the items from the database here, adding them to the list.

End Sub

End Module

Public Class LookupValue
Public Property Key As String
Public Property Value As String
End Class

想法是您有一个 LookupData 实例(VB 中的一个模块,只能有一个)。查找数据有一系列属性,每个属性都从数据库返回一个值列表。如果数据已经加载,它只返回缓存的内容。如果尚未加载数据,则在第一次引用它时会从数据库中检索它。

您可以在代码的其他地方使用它,如下所示:

Dim myStatuses = LookupData.Statuses

关于database - 来自数据库的 Winforms 数据跨多种形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55030097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com