2010-04-30 4 views
1

J'ai la commande sql suivante par code et parce que le paramètre contient une barre oblique lorsque j'évalue la ligne sql après la mise à jour, la colonne est juste vide.Comment échapper à la barre oblique?

sqlCommand.CommandText = String.Format("update {0} set {1}='{2}'where id = @Id", 
             tableName, ColumnName, forwardSlashText); 
sqlCommand.Parameters.Add("@Id", SqlDbType.UniqueIdentifier).Value = rowId; 
numRowsAffected = sqlCommand.ExecuteNonQuery(); 

l'ajout d'un log.debug à cette commande je reçois la sortie suivante ...

mise à jour my_table_name mis mime_type = 'application/pdf' où id = @Id

Donc je suppose que la commande est correcte, mais en regardant la ligne, la colonne mime_type est vide.

+0

Le problème pourrait être ailleurs, par exemple, dans l'attribution des '' valeur forwardSlashText' ou valeur rowId' nous montrer que le code – RedFilter

Répondre

2

Tout d'abord, en utilisant String.Format() pour synthétiser votre requête, faites attention à ne pas vous mettre en place pour une attaque par injection SQL. (Assurez-vous que tableName et ColumnName proviennent d'une source de confiance

Ensuite, voici comment je le ferais: Notez les parenthèses autour des noms de table et de colonne (qui échapperont tous les caractères funky que vous pourriez avoir dans le tableau ou . les noms de colonnes), mais plus important encore, notez que forwardSlashText est maintenant un paramètre:.

sqlCommand.CommandText = String.Format("update [{0}] set [{1}] = @val where id = @Id", 
            tableName, ColumnName); 
sqlCommand.Parameters.AddWithValue("@Id", rowId); 
sqlCommand.Parameters.AddWithValue("@val", forwardSlashText); 
numRowsAffected = sqlCommand.ExecuteNonQuery(); 
+0

Merci,. Oui, le code thei provient d'une source fiable (code du côté C#, pas de la saisie du paramètre) – AndrewB

3

La barre oblique n'est pas le problème. Bien que sur le sujet, cependant, pourquoi ne pas soumettre forwardSlashText en tant que paramètre, tout comme vous l'avez fait pour @Id?

0

Si vous copiez et collez ce code SQL dans SQL Server Management Studio et que vous l'exécutez, combien de lignes sont affectées? Vous devez exclure un problème de clause WHERE, car cela ressemble au problème. Vous devriez aussi log.debug la valeur de ID pour vérifier qu'il fait le bon.

Les chances sont que c'est -1 ou quelque chose parce que le problème est ailleurs.

Questions connexes