【发布时间】:2012-12-27 15:16:32
【问题描述】:
我有一个 F# 程序,它创建一个 DataTable,用一行填充它,然后使用批量插入 (SqlBulkCopy) 将数据写入 SQL Server。
虽然它正在工作,但我真的不知道如何包含一个循环,该循环将生成许多列表项/数据行,然后我可以将它们插入到一个语句中,而不必在一个语句中批量插入一行时间(这是目前的情况)
这是我的代码:
open System
open System.Data
open System.Data.SqlClient
let lcpSqlConnection = new SqlConnection("<my-connection-string>")
lcpSqlConnection.Open()
let bulkLoadEsgData (conn:SqlConnection) (esgTable: list<byte * byte * int * byte * byte * single>) =
use sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.TableLock, null, BatchSize=10000, BulkCopyTimeout=1200, DestinationTableName="dbo.myTable")
sbc.WriteToServer(
let dt = new DataTable()
["Measure", typeof<byte>
"Identifier", typeof<byte>
"Simulation", typeof<int>
"Time", typeof<byte>
"Duration", typeof<byte>
"Result", typeof<single>]
|> List.iter (dt.Columns.Add>>ignore)
for esgData in esgTable do
let esg_measure, identifier, simulation, time, duration, result = esgData
let dr = dt.NewRow()
dr.["Measure"] <- esg_measure
dr.["Identifier"] <- identifier
dr.["Simulation"] <- simulation
dr.["Time"] <- time
dr.["Duration"] <- duration
dr.["Result"] <- result
dt.Rows.Add(dr)
dt)
let myList: list<byte * byte * int * byte * byte * single> = [(byte)1,(byte)1,1, (byte)1,(byte)1,(single)0.111]
// Call method to bulk insert data row
bulkLoadEsgData lcpSqlConnection myList
lcpSqlConnection.Close()
我认为我需要在 bulkLoadEsgData 方法中包含一个 for 循环,以使代码高效运行。除了我不知道该做什么/在哪里写那个
【问题讨论】:
-
我也不知道你为什么被否决——这个问题没有错,而且你至少为你的尝试提供了代码(与许多其他提问者不同)。
-
如果你改写文本以更清楚你在找什么,你会没事的
标签: sql-server f# sqlbulkcopy