Foxtable(狐表)用户栏目专家坐堂 → [求助]将sqldatareader转变成datatable


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

主题:[求助]将sqldatareader转变成datatable

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]将sqldatareader转变成datatable  发帖心情 Post By:2021/3/8 22:12:00 [显示全部帖子]

在网上找到一个帖,是关于将mysql的sqldatareader转成datatable的。
https://blog.csdn.net/zgqtxwd/article/details/2353122

就是不知道效率如何?而且还不知道这个放在FT中,怎么用
我用的mysql,读取3.3W行数据到FT的表中,用时30秒。这个速度不满意,因为如果使用Sqlserver做外部数据源,然后load,只需要6秒左右。不知道哪里可以优化



DataTables("X").DataRows.Clear

Dim st1 As Date = Date.Now
Dim conn As MySql.Data.MySqlClient.MySqlConnection
Dim cmd As MySql.Data.MySqlClient.MySqlCommand

Dim connStr As String = "server=127.0.0.1; port=3306; user id=root; password=toor; database=CS;CharSet=utf8"
conn = New MySql.Data.MySqlClient.MySqlConnection(connStr)
conn.Open

Dim mda As New MySql.Data.MySqlClient.MySQLDataAdapter("S  elect * from X where 自定义条件", conn) 
Dim ds As New System.Data.DataSet()
mda.Fill(ds, "TableTemp") 
conn.close
output.Show("耗时: " & (Date.Now - st1).TotalSeconds & "秒")  ‘这个很快,几乎是秒完

Dim n As Integer = ds.Tables(0).Rows.Count

DataTables("X").AddNew(n)
output.Show("加行耗时: " & (Date.Now - st1).TotalSeconds & "秒")  ‘这个速度就有影响了,测试一般要7秒左右

For i As Integer = 0 To n - 1
    Dim dr As DataRow = DataTables("X").DataRows(i)
    Dim r As System.Data.DataRow  = ds.Tables(0).Rows(i)
    
    For Each c As DataCol In DataTables("X").DataCols
        dr(c.Name) = r(c.Name)
    Next
Next


output.Show("耗时: " & (Date.Now - st1).TotalSeconds & "秒")  ‘这个用时太长了,我的电脑上光这一段就要23秒左右。

要是能快速地将ds的数据转到datatables("X")中去,那就很好了。


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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2021/3/9 8:52:00 [显示全部帖子]

那不就意味着一旦使用mysql,必须全部使用窗口?或者说,只要数据量较大,比如超过2000行(暂未测试,还不知道多少数据量会明显耗时增多),就必须使用窗口

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2021/3/9 9:44:00 [显示全部帖子]

好吧。不直接支持mysql的情况下,看来mssql、access还是最佳选选择

 回到顶部