2010-03-25 8 views
1

Ma chaîne comprend un guillemet; le crash de l'instruction select.DataTable DataRow Chaîne de sélection avec des guillemets

vm_TEXT_string = "Hello 'French' People"; 
vm_DataTable_SELECT_string = "[MyField] = '" + vm_TEXT_string + "'"; 
DataRow[] o_DataRow_ARRAY_Found = vco_DataTable.Select (vm_DataTable_SELECT_string); 

Je ne peux pas utiliser cette instruction: filtre string = "[MaColonne]" + "LIKE '%" + + searchword "%';

J'ai trouvé format de chaîne:

DataRow[] oDataRow = oDataSet.Tables["HasDiseas"].Select (string.Format ("DName='{0}'", DiseasListBox.SelectedItem.ToString())); 

Toute suggestion de chaîne de selecta avec guillemet?

Merci, Rune

Répondre

1

Pour une datatable, vous pouvez remplacer le guillemet simple avec deux guillemets:

string.Format("DName='{0}'", DiseasListBox.SelectedItem.ToString().Replace("'", "''") 

Mais gardez à l'esprit que vous ne devriez pas faire cela avec des requêtes SQL réelles . Il est possible pour les crackers d'abuser de cette technique pour envoyer des requêtes indésirables à votre base de données.

Une autre option est de faire quelque chose comme ceci:

IEnumerable<DataRow> rows = oDataSet.Tables["HasDiseas"].Where(r => r["DName"] == DiseasListBox.SelectedItem.ToString()); 
+0

Merci beaucoup pour vos commentaires Pourriez-vous montrer cet exemple concernant cette déclaration? vm_TEXT_string = "Bonjour 'Français' Personnes"; – RBrattas

+0

vm_TEXT_string = "Bonjour 'Français' Personnes"; La chaîne ne peut pas changer; voici à quoi ressemble ma chaîne dans la base de données et le DataTable – RBrattas

0

Cela dépend de votre moteur de base de données, mais en général, vous pouvez échapper à la citation unique (') avec deux apostrophes (''). Bien que, la meilleure façon de le faire est d'utiliser un parametrized query, qui fera le caractère spécial qui s'échappe pour vous.

+0

Merci beaucoup pour vos commentaires! Ceci est seulement un problème quand j'utilise select dans le DataTable. Y at-il une déclaration où je n'ai pas à penser à ce qui est dans ma chaîne? vm_TEXT_string = "Bonjour 'Français' Personnes"; – RBrattas