F#-FSharp.Data.SqlClient –如何指定更新超时

时间:2019-01-09 02:00:59

标签: sql-server f# fsharp.data.sqlclient

我使用FSharp.Data.SqlClient类型的提供程序来访问SQL Server数据库。因此,我在F#中设置类型如下:

type ClmDB = SqlProgrammabilityProvider<ClmSqlProviderName, ConfigFile = AppConfigFile>
type ResultDataTable = ClmDB.dbo.Tables.ResultData
type ResultDataTableRow = ResultDataTable.Row

然后我用类似的东西:

let saveResultData (r : ResultData) (conn : SqlConnection) =
    let t = new ResultDataTable()
    let newRow = r.addRow t
    t.Update(conn) |> ignore
    newRow.resultDataId

其中ResultData是某种类型,它“知道”如何将自身转换为ResultDataTableResultDataTableRow)行。扩展名为r.addRow t

一切都很好,除了我要插入的行可能很大(25-30 MB)之外,因此,我感到t.Update(conn)可能会随机超时,特别是由于接近100处理器负载百分比(计算系统核心旨在消耗所有处理资源,尽管优先级较低)。将鼠标悬停在t.Update上不会显示任何指定超时的方法,并且连接级别的任何超时都与连接有关,而不与插入事务☹有关。

因此,问题是如何为Update事务指定超时。

非常感谢!

20190116 更新-到目前为止,t.Update(conn)在我的计算机上没有超时,同时以比某些 other 的正常负载低100%的速度插入95MB数据行东西在那里跑。我尚未测量此类交易的实际时间。如果这样做,我将对其进行更新。

1 个答案:

答案 0 :(得分:1)

您不能为提供的Update的{​​{1}}方法指定超时,因为当前的类型提供程序实现未提供此类功能。

不过,正如the documentation所指出的那样,您可能没有太多自定义默认行为的选项。

此外,由于您的用例类似于在表中插入一行,因此我会坚持使用DataTable的实现,使用其构造函数的SqlCommandProvider可选参数来设置所需的超时值commandTimeOut,如下面的代码段所示:

timespan