我使用FSharp.Data.SqlClient类型提供程序访问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是某种类型,它“知道”如何将自己转换为一行ResultDataTable (ResultDataTableRow)。扩展r.addRow t可以做到这一点。
一切都很棒,除了我插入的行可能相当大(25到30 MB的大小),因此,我有一种不好的感觉,t.Update(conn)可能会随机超时,特别是由于几乎100%的处理器负载(计算系统内核被设计用于消耗所有的处理资源,尽管优先级很低)。悬停在t.Update上并不显示任何指定超时的方法,连接级别上的任何超时都与连接相关,而不是与插入事务☹相关。
因此,问题是如何为Update事务指定超时。
非常感谢!
20190116 update --到目前为止,在我的机器上插入95 my数据行时,上面的t.Update(conn)还没有超时,而这些数据行比运行在那里的其他东西的正常负载低100%。我尚未衡量这类交易的实际时间。如果我这么做了,我会更新这个。
发布于 2019-01-10 21:36:44
您不能为提供的Update方法指定超时,因为当前的Type实现没有提供这种功能。
但是,正如文献资料所指出的,您可能没有多少选择来自定义默认行为。
此外,由于用例类似于将单个行插入到表中,因此我希望借助SqlCommandProvider使用构造器的commandTimeOut可选参数来设置所需的超时值timespan,如下所示:
type AddRow = SqlCommandProvider<"path to the parameterized INSERT statement", designTimeConnection>
..............................
(new AddRow(runTimeConnection, commandTimeOut=timespan)).Execute(...arg=value...) |> ignorehttps://stackoverflow.com/questions/54102323
复制相似问题