Я использую провайдеров типа FSharp.Data.SqlClient
для доступа к базе данных сервера SQL. Итак, я настроил типы в 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 МБ), и поэтому у меня плохое предчувствие, что t.Update(conn)
может случайно отключиться, особенно из-за почти 100% процессора нагрузка (ядро вычислительной системы предназначено для потребления всех ресурсов обработки, хотя и с низким приоритетом). При наведении курсора на t.Update
не отображается способ указать время ожидания, и любое время ожидания на уровне соединения относится, в общем, к соединению, а не к транзакции вставки ☹.
Итак, вопрос в том, как указать время ожидания для транзакции Update
.
Большое спасибо!
20190116 обновление - до сих пор t.Update(conn)
выше работает без таймаутов на моей машине, вставляя строки данных 95 МБ при 100% ниже нормальной загрузки некоторых других работающих там вещей. Я еще не измерял фактическое время для таких транзакций. Если я это сделаю, я обновлю это.