2012-01-20 17 views
2

大量のデータをF#からSQLテーブルに転送したいとします。基本的に私のF#コードは、3列(UserID, ProductID and price)の行列とN行を作成します。 私はいくつかのオプションを試しましたが、最終的にF#からのデータ転送は実際には遅いです(10000行では1時間程度)。F#でSqlBulkCopyを使用してSQLで行列をエクスポートする

前の質問How to include a stored procedure in F#の回答により、この問題を解決する興味深い方法はSqlBulkCopyです。

SqlBulkCopyは、WritetoServerメソッドのデータベースタイプが必要ですが、既存のコードやマトリックスをデータベースに変換する簡単な方法が見つかりませんでした。 ご意見やご提案はありますか?

+0

あなたの「マトリックス」の種類は何ですか? –

答えて

5

これは、あなたが始められる(および詳細については、documentationについて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) 
+0

スティーブン、ありがとう、それは完全に仕事をしています。 – fabco63

関連する問題