fab*_*o63 2 sql f# matrix sqlbulkcopy
我想将大量数据从F#传输到SQL表.基本上我的F#代码创建了一个包含三列(UserID, ProductID and price
)和N行的矩阵.我想"复制/掌握它"到数据库中我尝试了几个选项,但最后,从F#传输数据真的很慢(10000行左右大约一小时).
感谢前一个问题的答案如何在F#中包含存储过程,解决此问题的一个有趣方法是使用SqlBulkCopy
.
SqlBulkCopy
需要一个数据库类型的WritetoServer
方法,但我没有找到任何现有的代码或简单的方法将矩阵转换为数据库.你有什么建议或想法吗?
这应该可以帮助您入门(并参考文档以获取更多信息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)
Run Code Online (Sandbox Code Playgroud)