2009-05-19 8 views
2

Je suis en train de corriger bug guillemet simple dans le code:False Alarm: SqlCommand, SqlParameter et des guillemets simples

std::string Index; 

connection->Open(); 
String^ sTableName = gcnew String(TableName.c_str()); 
String^ insertstring = String::Format("INSERT INTO {0} (idx, rec, date) VALUES (@idx, @rec, getdate())", sTableName); 
SqlCommand^ command = gcnew SqlCommand(insertstring, connection); 
String^ idx = gcnew String(Index.c_str()); 
command->Parameters->Add("@idx", SqlDbType::VarChar)->Value = idx; 

Le bug est que si IDX = « qui est », le SQL échoue en disant qu'il ya une erreur de syntaxe. De toute évidence, le problème est dans la citation. Mais certains googlings montre que l'utilisation de paramètres est la façon de travailler avec des guillemets. Et SqlParameter fonctionne bien, si le type est TEXT et non VARCHAR.

Il existe d'autres solutions que de doubler manuellement le nombre de symboles de citation dans la chaîne? Mise à jour: J'ai essayé de modifier manuellement ce champ dans SQL Management Studio et il n'a pas autorisé les guillemets simples dans le champ VARCHAR. C'est normal en SQL?

+1

Etes-vous absolument certain que c'est le devis unique? Quel est le message d'erreur réel? – Steven

+0

Oui. Le message d'erreur est: "Syntaxe incorrecte près de" S ".". –

Répondre

2

Je soupçonne que le problème est soit une citation entrant dans votre nom de table, ou que idx sonne plus comme le nom d'un type de numéro qu'un type de caractère. En fonction de votre mise à jour, je vous suggère de vérifier les contraintes supplémentaires sur la table dans le studio de gestion.

+0

Non, j'ai vérifié la table --- c'est un VARCHAR –

+0

Merci! Cela a résolu le problème! Il y avait des déclencheurs offensants pour cette table SQL. –

0

Si vous êtes sûr est un prob cite alors,

code C#:

idx = idx.Replace("'", "''"); 

résoudrait le problème.

+0

Ceci est fait automatiquement par SqlParameter –

+0

Oui, cela résout le problème, mais c'est le moyen le plus propre à résoudre? Et l'erreur ne se déclenche pas si le type de données est TEXT (dans un autre champ) au lieu de VARCHAR. –

0

Désolé.

Le problème résidait dans le code du déclencheur SQL. Après les avoir enlevés, tout a bien fonctionné.

Questions connexes