Foxtable(狐表)用户栏目专家坐堂 → 连两个数据库取数据的话,之间怎么数据交互?


  共有2227人关注过本帖树形打印复制链接

主题:连两个数据库取数据的话,之间怎么数据交互?

帅哥哟,离线,有人找我吗?
houseer
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:325 积分:2752 威望:0 精华:0 注册:2015/2/3 19:48:00
连两个数据库取数据的话,之间怎么数据交互?  发帖心情 Post By: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

 经过测试,速度不太理想。     怎么着能快一点?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:325 积分:2752 威望:0 精华:0 注册:2015/2/3 19:48:00
  发帖心情 Post By:2019/9/27 11:58:00 [只看该作者]

   老师我照这个改了,代码简单了一点。 没感觉速度有提升啊

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106688 积分:542629 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/27 12:10:00 [只看该作者]

做什么功能呀?有多少数据咯?

 回到顶部
帅哥哟,离线,有人找我吗?
一丁
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:300 积分:2826 威望:0 精华:0 注册:2017/9/14 8:21:00
  发帖心情 Post By:2019/9/27 13:43:00 [只看该作者]

构造 select …… fro m …… where 字段 in …… 句式,一次性把符合条件的记录提取出来,然后再作匹配事项处理,避免反复从后台SQL一条一条的提取记录,效率应该会高很多吧

 回到顶部
帅哥哟,离线,有人找我吗?
houseer
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:325 积分:2752 威望:0 精华:0 注册:2015/2/3 19:48:00
  发帖心情 Post By:2019/9/27 13:54:00 [只看该作者]

  查询几百条数据吧。   然后每一条数据中的3个字段,分别做上面的那种对比。

 回到顶部
帅哥哟,离线,有人找我吗?
一丁
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:300 积分:2826 威望:0 精华:0 注册:2017/9/14 8:21:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:325 积分:2752 威望:0 精华:0 注册:2015/2/3 19:48:00
  发帖心情 Post By:2019/9/27 13:55:00 [只看该作者]

以下是引用一丁在2019/9/27 13:43:00的发言:
构造 select …… fro m …… where 字段 in …… 句式,一次性把符合条件的记录提取出来,然后再作匹配事项处理,避免反复从后台SQL一条一条的提取记录,效率应该会高很多吧
嗯这个办法我试试去。


 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106688 积分:542629 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/27 14:15:00 [只看该作者]

什么时候测试几千上万条,如果速度还是一样再说。或者改为远程数据库测试。本地数据库这么点数据和运算,基本不会有什么速度问题

 回到顶部
帅哥哟,离线,有人找我吗?
houseer
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:325 积分:2752 威望:0 精华:0 注册:2015/2/3 19:48:00
  发帖心情 Post By: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

 回到顶部
总数 11 1 2 下一页