以文本方式查看主题

-  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