【问题标题】:Visual Studio VB - Query from datatable instead of databaseVisual Studio VB - 从数据表而不是数据库查询
【发布时间】:2016-09-28 08:25:22
【问题描述】:

我是一名经验丰富的 Excel VBA 编码器,已深入了解此表单 Access 数据库项目。我正在处理表单的一部分,用户(员工)将选择站点位置(总共 84 个,但并非所有都将根据他们所在的团队显示),然后选择该站点中的部门。总共有 2,189 个部门,因此部门列表应仅显示该站点的部门。

我们查询和更新的数据库在一个非常慢的服务器上,所以我想在开始时将整个查找表(仅限于团队工作的那些)拉到数据表中,然后填充第一个组合在该数据表中包含唯一站点的框,然后用该站点的所有部门填充第二个组合框。

数据表或多或少只是 |身份证 |网站 |部门|。我可以很好地填充该数据表并将其保留在缓存中。而且我可以遍历数据表来填充组合框,但这比它可能的要慢。

那么有没有办法从该数据表中查询以直接填充组合框,或者填充辅助数据表然后到组合框?对于第一个框,寻找独特的站点是一个挑战。然后是第二个,它的站点等于在第一个框中选择的那个部门。

谢谢!

【问题讨论】:

标签: sql vb.net combobox datatable


【解决方案1】:

您可以使用“Andrew Morton”提到的 Linq to Sql,我为您做了一个示例:

 Dim da As SqlDataAdapter = New SqlDataAdapter("select * from YourDatatable, con)
 Dim dt As New Data.DataTable()
 da.Fill(dt)
      'You can change here your condition as you need
 Dim query = (From d1In dt.AsEnumerable() _
                    Where d1.Field(Of Integer)("ID") = 1 And d1.Field(Of Integer)  
                    Select d1!ID, order!Site , d1!Department , 
              If query.Count > 0 Then
                 comboBox1 .Items .Add (query(0).Site)  'Fill your Combobox1
              end if    

 Dim query2 = (From d2 In dt.AsEnumerable() _
                    Where d2.Field(Of Integer)("ID") = 2 And d2.Field(Of Integer) 
             Select d2!ID, order!Site , d2!Department , 
              If query2.Count > 0 Then
                     comboBox2 .Items .Add (query2(0).Department )  'Fill your Combobox2
              end if  

【讨论】:

  • 谢谢两位!我将深入学习 Linq 语法。看来这正是我所需要的。你是传奇!
  • 抱歉,后续问题:如何在特定子结束后保持数据表打开?或者我应该将它分配给一个列表以保存在缓存中?我希望用户能够在站点之间切换,并且仍然可以查找部门。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 2020-12-11
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多