Erreur dans l'opérateur Like: modèle de chaîne non valide "% XXXX * XXXX%"

Erreur dans l'opérateur Like dans datatable.select: modèle de chaîne non valide "% XXXX * XXXX%"

  1. Premièrement, certains symboles de la requête floue comme operator doivent être échappés ou remplacés dans datatable.select (et les chaînes normales peuvent être exécutées en sql), par exemple:

    Après que '% xxx *' apparaisse *, il doit être changé en [*], car sql confondra ceci * comme un espace réservé, et une erreur se produira lors de la compilation

  2. Il y a des symboles ou des mots-clés dans la chaîne que vous devez insérer ou mettre à jour dans l'instruction datatable.select qui doivent être modifiés comme ceci, par exemple:

    1. '.', '_', '[', '%', etc. doivent être ajoutés avec '[]'. Un point est que s'il y a un guillemet simple '' 'dans la chaîne, il doit être changé en '' '' guillemets doubles (ou deux guillemets simples), aucune exception ne sera signalée lors de l'insertion et de la mise à jour des données

  3. Bien sûr, il existe des situations similaires en SQL. Si vous choisissez la méthode paramétrée sqlparameter, vous n'avez pas besoin d'effectuer ces opérations. Cette méthode évite efficacement l'injection SQL.

Solution

  1. Vous pouvez utiliser Replace ("#", "[#]") pour remplacer * dans la chaîne par [*]
  2. 
            public static void AutoComplete(ComboBox cb, DataTable dt, string filed)
            {
                if (cb.Text == "")
                {
                    return;
                }
                cb.Items.Clear();
                cb.Items.Add("");//C111-NM-CA+PMMA-0.5+5+2+0.5*47//C111-NM-CA+PMMA-0.5+5+2+0.5[*]47
                string condition = cb.Text.Replace("*", "[*]");
                condition = cb.Text.Replace("#", "[#]");
                condition = cb.Text.Replace("%", "[%]");
                DataRow[] drs = dt.Select(filed + @" like '%" + condition.Replace("*", "[*]").Replace("#", "[#]").Replace("%", "[%]") + "%'");
                List<string> item_list = new List<string>();
                foreach (DataRow dr in drs)
                {
                    item_list.Add(dr[filed].ToString());
                }
                cb.Items.AddRange(item_list.ToArray());
                cb.SelectionStart = cb.Text.Length;
                cb.Cursor = Cursors.Hand;
                cb.DroppedDown = true;
            }

     

Je suppose que tu aimes

Origine blog.csdn.net/qq_37192571/article/details/111640916
conseillé
Classement