Как обновить таблицу SQL с помощью F # - PullRequest
2 голосов
/ 14 октября 2011

Я хотел бы обновить таблицу MySQL из запроса F #.Теперь я могу импортировать таблицу MySql в матрицу F #.Я делаю некоторые вычисления для этой матрицы через F #, и после вычисления я хотел бы обновить первичную таблицу MySQL новыми полученными значениями.Например, давайте возьмем простую матрицу из таблицы MySQL:

let m  = matrix [[1.;2.;3.];[1.;1.;3.];[3.;3.;3.]]

Теперь я хотел бы разработать запрос, обновляющий таблицу MySQL.

let query() =
  seq { use conn = new SqlConnection(connString)
        do conn.Open()
        use comm = new SqlCommand("UPDATE MyTAble SET ID = "the first column of the matrix",
                                  conn)
       }

Нужно ли преобразовыватьматрица в последовательности?Для этого итеративного обновления мне нужно использовать T-SQL (я нашел этот способ, читая ответы других?

1 Ответ

2 голосов
/ 14 октября 2011

Нет встроенной функциональности, которая облегчила бы обновление F # matrix в базе данных, поэтому вам придется написать обновление самостоятельно.Я думаю, что лучший подход - просто перебрать матрицу, используя for, и запустить команду обновления, если значение изменилось.Примерно так:

let m1 = matrix [[1.;0.]; [0.;2.]] // The original value from DB
let m2 = m1 + m1                   // New updated matrix 

for i in 0 .. (fst m1.Dimensions) - 1 do
  for j in 0 .. (snd m1.Dimensions) - 1 do
    if m1.[i, j] <> m2.[i, j] then
      // Here you need to do the actual update
      printfn "SET %d, %d = %f" i j m2.[i, j]

Ваша функция уже показывает, как запустить одну команду UPDATE - просто обратите внимание, что вам не нужно переносить ее в seq { .. }, если вы не возвращаете последовательность результатов (здесь вы просто хотите выполнить какое-либо действие).

Если количество измененных значений велико, то может быть полезно использовать некоторые функции массового обновления (чтобы не запускать слишком много команд SQL, которыеможет быть медленным), но я не уверен, что в MySQL есть что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...