F#でSqlBulkCopyを使用してSQLで行列をエクスポートする

f# matrix sql sqlbulkcopy

質問

F#からSQLテーブルに大量のデータを転送したい。基本的に私のF#コードは、3つの列( UserID, ProductID and price )とN行のマトリックスを作成します。私は「コピー/ペイト」したいデータベースにいくつかのオプションを試しましたが、最後にF#からのデータ転送は非常に遅いです(10000行で約1時間)。

前の質問の回答ありがとうF#にストアドプロシージャを含める方法、この問題を解決する興味深い方法は、 SqlBulkCopyを使用することSqlBulkCopy

SqlBulkCopyWritetoServerメソッドにデータベース型が必要SqlBulkCopyが、既存のコードや行列をデータベースに変換する簡単な方法が見つかりませんでした。提案やアイデアはありますか?

受け入れられた回答

これで、あなたが始められるはずです(また、 SqlBulkCopy詳細については、 ドキュメントを参照して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)


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ