提问人:roy 提问时间:7/26/2023 最后编辑:roy 更新时间:7/27/2023 访问量:76
如何在 datagridview 中使用 Dapper 和数据库 MS-ACCESS 进行多重查询 VB.NET
How Multiple Query in datagridview using Dapper with database MS-ACCESS in VB.NET
问:
我有三个具有不同路径的MS-Access文件。如何使用 dapper 从列表/模型查询多个数据网格视图。
请指导我。
谢谢
MS-ACCESS 文件的信息路径
TABLEA = D:\TABLEA.accdb
TABLEB = Z:\DATA\Malfin 07\TABLEB.accdb
TABLEC = Z:\DATA\Malfin D2\TABLEC.accdb
Public Class Form1
Public Function GetOledbConnectionString() As String
Return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=;Persist Security Info=False;"
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Using conn = New OleDbConnection(GetOledbConnectionString)
Using data = conn.QueryMultiple("select * from User", Nothing)
End Using
End Using
End Sub
End Class
Public Class User
Public Property ID() As Integer
Public Property FIRSTNAME() As String
Public Property LASTNAME() As String
End Class
TABLEA的
表名:用户
编号 | 名字 | 姓氏 |
---|---|---|
1 | TEST1000 | 1000测试 |
2 | TEST2000 | 2000测试 |
表B
表名:用户
编号 | 名字 | 姓氏 |
---|---|---|
1 | TEST3000 | 3000测试 |
2 | TEST4000 | 4000测试 |
表C
表名:用户
编号 | 名字 | 姓氏 |
---|---|---|
1 | TEST5000 | 5000测试 |
2 | TEST6000 | 6000测试 |
datagridview 中的预期结果
名字 | 姓氏 |
---|---|
TEST1000 | 1000测试 |
TEST2000 | 2000测试 |
TEST3000 | 3000测试 |
TEST4000 | 4000测试 |
TEST5000 | 5000测试 |
TEST6000 | 6000测试 |
答:
1赞
Shahram Alemzadeh
7/26/2023
#1
我不认为 QueryMultiple 以这种方式工作。
创建三个结果集和 UNION 或连接它们:
CONST constrA = "..."
CONST constrB = "..."
CONST constrC = "..."
FUNCTION GetUsers(constr AS STRING) AS IENUMERABLE(OF User)
USING con AS oledbconnection = NEW oledbconnection(constr)
RETURN con.query(OF User)("SELECT * FROM [User]")
END USING
END FUNCTION
SUB FORM_LOAD
users_datagridview.datasource = GetUsers(constrA).UNION(GetUsers(constrB)).UNION(GetUsers(constrC)).TOLIST
END SUB
或者将 B 和 C 数据库中的表作为链接表添加到 A 数据库中,以便可以在单个查询中合并它们:
CONST constrA = "..."
FUNCTION GetAllUsers() AS IENUMERABLE(OF User)
USING con As oledbconnection = NEW oledbconnection(constrA)
RETURN con.query(OF User)("(SELECT * FROM [User]) UNION (SELECT * FROM User_B) UNION (SELECT * FROM User_C)")
END USING
END FUNCTION
SUB FORM_LOAD
users_datagridview.datasource = GetAllUsers.TOLIST
END SUB
评论
0赞
roy
7/27/2023
谢谢你的回答。你的回答很完美。首先,我有一个错误,但我将表重命名为可能是因为Access中的保留字syntax error in from clause
User
Users
0赞
Shahram Alemzadeh
7/27/2023
很高兴听到这个消息,并感谢您的友好回应。我编辑了代码并在 User 周围添加了 [ ]。
0赞
roy
7/27/2023
好的,谢谢先生
0赞
roy
7/27/2023
如果我对每个访问文件的每个 sql 进行访问,是否可以使用您的第一个答案选项
0赞
Shahram Alemzadeh
7/27/2023
@pret : 对不起,你的问题对我来说有点含糊不清。正如 Palle Due 已经提到的,dapper 查询一次只处理一个连接,因此只处理一个数据库。在第一种方法中,实际上将来自 3 个独立数据库的 3 个结果集合并为一个结果集。并且,每个数据库都使用单独的连接。
评论