以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 连两个数据库取数据的话,之间怎么数据交互? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=141337) |
-- 作者:houseer -- 发布时间:2019/9/27 5:42:00 -- 连两个数据库取数据的话,之间怎么数据交互? 我从一个数据库a中(非sql)读取出一个结果集, 保存到狐表的一个datatables("临时表")中。 下一步我想对这个datatable中的每一行中的某个字段值,从另一个数据库b中查找。 这种的用什么方法效率高? 因为速度关系我不能把数据库b的数据全部加载到狐表中来。 目前是这种方法: dim dr as datarow dim lstable as datatable for each dr in datatables(“临时表”).datarows cmd.C cmd.CommandText = "sql语句..." lstable = cmd.ExecuteReader() If lstable.DATARows.Count = 0 Then dr("SF") = 0 End If next 经过测试,速度不太理想。 怎么着能快一点? |
-- 作者:狐狸爸爸 -- 发布时间:2019/9/27 8:02:00 -- 你只是计数,你应该用Count和ExecuteScalar,例如: Dim cmd As New SQLCommand
Dim nm As String = "贺辉" cmd.ConnectionName = "User" cmd.CommandText ="Sel ect Count(*) From {Users} Where Name = \'" & nm & "\'" If cmd.ExecuteScalar > 0 Then Messagebox.Show("已经存在同名用户","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) End If |
-- 作者:houseer -- 发布时间:2019/9/27 11:58:00 -- 老师我照这个改了,代码简单了一点。 没感觉速度有提升啊 |
-- 作者:有点蓝 -- 发布时间:2019/9/27 12:10:00 -- 做什么功能呀?有多少数据咯? |
-- 作者:一丁 -- 发布时间:2019/9/27 13:43:00 -- 构造 select …… fro m …… where 字段 in …… 句式,一次性把符合条件的记录提取出来,然后再作匹配事项处理,避免反复从后台SQL一条一条的提取记录,效率应该会高很多吧 |
-- 作者:houseer -- 发布时间:2019/9/27 13:54:00 -- 查询几百条数据吧。 然后每一条数据中的3个字段,分别做上面的那种对比。 |
-- 作者:一丁 -- 发布时间:2019/9/27 13:55:00 -- Dim dr As DataRow Dim lstable As DataTable Dim cSQLfilter As String ="(" For Each dr In DataTables("临时表").datarows cSQLfilter=cSQLfilter & "\'" & dr("字段名") & "\'," Next cSQLfilter=cSQLfilter.SubString(0,cSQLfilter.Length-1) & ")" Dim cmd As New SQLCommand …… cmd.CommandText ="Sel ect 字段 From {表名} Where 字段 in " & cSQLfilter …… 仅供参考 |
-- 作者:houseer -- 发布时间:2019/9/27 13:55:00 -- 以下是引用一丁在2019/9/27 13:43:00的发言: 构造 select …… fro m …… where 字段 in …… 句式,一次性把符合条件的记录提取出来,然后再作匹配事项处理,避免反复从后台SQL一条一条的提取记录,效率应该会高很多吧 嗯这个办法我试试去。
|
-- 作者:有点蓝 -- 发布时间:2019/9/27 14:15:00 -- 什么时候测试几千上万条,如果速度还是一样再说。或者改为远程数据库测试。本地数据库这么点数据和运算,基本不会有什么速度问题 |
-- 作者:houseer -- 发布时间:2019/9/27 14:24:00 -- 临时表里几百条数据, sql需要查询数据库里有几万条。 而且是本地数据。 dim dr as datarow dim lstable as datatable for each dr in datatables(“临时表”).datarows \'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\' 这个临时表里有几百条数据 cmd.C cmd.CommandText = "sql语句..." ’\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'这个数据库里有几十万条数据。 但是我是用where精确查找的,单次不会花多少时间。问题是在循环里用。 lstable = cmd.ExecuteReader() If lstable.DATARows.Count = 0 Then dr("SF") = 0 End If next |