以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]将sqldatareader转变成datatable (http://foxtable.net/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还是最佳选选择 |