如何使用F#更新SQL表

时间:2011-10-14 17:52:52

标签: mysql f#

我想从F#查询更新MySQL表。 基本上我现在能够将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 个答案:

答案 0 :(得分:2)

没有内置功能可以更容易地更新数据库中的F#matrix,因此您必须自己编写更新。我认为最好的方法是使用for简单地迭代矩阵,并在值发生变化时运行update命令。类似的东西:

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是否有这样的事情。