2011-10-14 5 views
2

Je voudrais mettre à jour une table MySQL à partir d'une requête F #. Fondamentalement, je suis maintenant en mesure d'importer une table MySql dans une matrice F #. Je fais un calcul sur cette matrice à travers F # et après le calcul je voudrais mettre à jour la table primaire MySQL avec les nouvelles valeurs obtenues. Par exemple, nous allons prendre une matrice simple venant d'une table MySQL:Comment mettre à jour une table SQL avec F #

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

Maintenant, je voudrais concevoir une requête qui met à jour la table 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) 
     } 

Ai-je besoin de convertir la matrice en une séquence? Pour cette mise à jour itérative, dois-je utiliser T-SQL (je trouve cette façon en lisant quelques réponses des autres?

+2

Quel est le schéma de base de données pertinent? C'est-à-dire, les tables et les colonnes qui doivent être mises à jour. – ildjarn

Répondre

2

Il n'y a pas de fonctionnalité intégrée qui rendrait plus facile la mise à jour F # matrix dans une base de données, . vous devrez écrire la mise à jour vous-même, je pense que la meilleure approche est de simplement itérer sur la matrice en utilisant for et exécutez la commande de mise à jour si la valeur a changé quelque chose comme:.

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] 

Votre fonction montre déjà comment pour exécuter une seule commande UPDATE - notez simplement que vous n'avez pas besoin d'envelopper dans seq { .. } si vous ne renvoyez pas une séquence de résultats (ici, vous voulez juste p échapper à une action). Si le nombre de valeurs modifiées est important, il peut être utile d'utiliser une fonctionnalité de mise à jour groupée (afin de ne pas exécuter trop de commandes SQL qui peuvent être lentes), mais je ne suis pas sûr que MySQL a quelque chose comme ça.

+1

Il fait, en fait: http://dev.mysql.com/doc/refman/5.1/en/connector-net-programming-bulk-loader.html – Daniel

+0

Merci pour votre aide Thomas et Daniel, maintenant il fonctionne parfaitement – fabco63

Questions connexes