2010-04-15 4 views
2

J'essaie de renommer un champ dans ma base de données via SQLite.net et j'obtiens une erreur de syntaxe. My SQL que je l'ai testé est:Erreur de syntaxe dans SQLite.net lors du passage du nom de la colonne en tant que paramètre

UPDATE candy SET name="Godiva" WHERE name="Sees"; 

et qui fonctionne très bien. J'utilise un SQLiteCommand avec un CommandText de:

UPDATE candy SET @[email protected]_name WHERE @[email protected]_name; 

et mon extrait de code qui définit les valeurs ressemble à ceci:

Connection.Open(); 
transaction = Connection.BeginTransaction(); 
UpdatePropertyQuery.Parameters.AddWithValue("@field_name", "name"); 
UpdatePropertyQuery.Parameters.AddWithValue("@old_name", "Sees"); 
UpdatePropertyQuery.Parameters.AddWithValue("@new_name", "Godiva"); 
UpdatePropertyQuery.ExecuteNonQuery(); 
transaction.Commit(); 
Connection.Close(); 

Je ne suis pas expert en base de données, du point de vue d'un débutant, cela semble ça devrait marcher, mais c'est peut-être quelque chose avec SQL en général que je ne comprends pas. Quelle est la bonne façon de faire cela, et quelqu'un peut-il expliquer pourquoi cette approche ne fonctionnerait pas?

Répondre

2

En règle générale des déclarations de ce genre ne sont possibles que lorsque vous utilisez des paramètres qui se rapportent aux paramètres formels réels dans la c.-à-requête sous-jacente:

UPDATE candy SET [email protected]_name WHERE [email protected]_name; 

L'idée étant que tous les objets de base de données comme les noms de table et sur le terrain doit être déclaré implicitement dans la déclaration, afin que la bibliothèque d'accès à la base de données sous-jacente puisse effectuer des vérifications selon les lignes de "est la valeur donnée pour candy.name du type correct".

Dans votre exemple, le nom de champ n'est pas connu à l'avance et ces types de contrôles ne sont donc pas possibles.

Un peu plus d'informations here.

Si le nom du champ est variable, vous pouvez simplement créer une chaîne contenant le code SQL et l'exécuter directement, ou ajuster ce que vous devez inclure le nom du champ dans le texte de la commande.

+1

ok, merci pour l'information. J'essayais de maximiser les performances en utilisant des requêtes paramétrées, mais je suppose que le paramétrage du nom de la colonne n'est pas possible. Je dois lire sur ce truc. – Dave

Questions connexes