以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]将sqldatareader转变成datatable  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=161170)

--  作者:chnfo
--  发布时间:2021/3/8 22:12:00
--  [求助]将sqldatareader转变成datatable
在网上找到一个帖,是关于将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")中去,那就很好了。


--  作者:有点蓝
--  发布时间:2021/3/8 22:42:00
--  
没有办法的。为什么一定要转到datatables,直接绑定窗口表使用不行吗?
--  作者:chnfo
--  发布时间:2021/3/9 8:52:00
--  
那不就意味着一旦使用mysql,必须全部使用窗口?或者说,只要数据量较大,比如超过2000行(暂未测试,还不知道多少数据量会明显耗时增多),就必须使用窗口
--  作者:有点蓝
--  发布时间:2021/3/9 8:55:00
--  
使用窗口有什么问题?目前不直接支持的数据库最好的还是使用窗口
--  作者:chnfo
--  发布时间:2021/3/9 9:44:00
--  
好吧。不直接支持mysql的情况下,看来mssql、access还是最佳选选择