我想将大量数据从 F# 传输到 SQL 表。基本上我的 F# 代码创建了一个三列矩阵 (UserID, ProductID and price
)和N行。我想将其“复制/粘贴”到数据库中
我尝试了多种选择,但最终,从 F# 传输数据非常慢(10000 行大约需要 1 小时)。
感谢上一个问题的回答如何在 F# 中包含存储过程 https://stackoverflow.com/questions/8899678/how-to-include-a-stored-procedure-in-f/8899791#8899791,解决这个问题的一个有趣的方法是使用SqlBulkCopy
.
SqlBulkCopy
需要一个数据库类型WritetoServer
方法,但我没有找到任何现有代码或将矩阵转换为数据库的简单方法。
您有什么建议或想法吗?
这应该可以帮助您开始(并参考文档 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx欲了解更多信息SqlBulkCopy
):
//you must reference System.Data and System.Xml
open System.Data
open System.Data.SqlClient
let bulkLoadUserPurchases (conn:SqlConnection) (userPurchases: list<int * int * float>) =
use sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.TableLock, null, BatchSize=500, BulkCopyTimeout=1200, DestinationTableName="YOUR_TABLE_NAME_HERE")
sbc.WriteToServer(
let dt = new DataTable()
["UserID", typeof<int>
"ProductID", typeof<int>
"Price", typeof<float>]
|> List.iter (dt.Columns.Add>>ignore)
for userPurchase in userPurchases do
let userId, productId, price = userPurchase
let dr = dt.NewRow()
dr.["UserID"] <- userId
dr.["ProductID"] <- productId
dr.["Price"] <- price
dt.Rows.Add(dr)
dt)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)