2009-03-19 16 views
17

Staram się budować zapytania SQL za pomocą parametru w C# dla kwerendy, która będzie zawierać komendę LIKE %%.C# konstruowania zapytań SQL parametr - LIKE%

Oto co usiłuję acheive (proszę pamiętać, że baza danych jest Firebird)

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%?%'", TABLE, NAME); 
cmd.Parameters.AddWithValue(NAME, "JOHN"); 

Teraz próbowałem każdy permutacji uzyskać parametr do pracy, próbowałem;

  • Dodawanie % znak parametru,

    cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%"); 
    
  • lub

    cmd.Parameters.AddWithValue(NAME, "'%" + "JOHN" + "%'"); 
    

I nie może wydawać się uzyskać to do pracy, w jaki sposób można użyć parametru dla zapytanie LIKE do działania.

sugestie są mile widziane!

+0

wydaje się, że istnieje jakiś brakujący kod, gdzie jesteś przypisywanie do polecenia SQL? Co ty coraz błąd lub jest wynikiem kwerendy po prostu nie to, czego się spodziewać? –

+0

tak, SQL jest przypisywany do parametru Cmd.CommandText. –

Odpowiedz

26

Nie można podać parametrów w literale tekstowym w zapytaniu. Uczynić całą wartość parametru i dodać do ciągu znaków wieloznacznych:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE ?", TABLE, NAME); 
Cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%"); 
+0

Przykładem może być? wygląda na to, że właśnie skopiowałeś mój kod. –

+0

Zwróć baczniejszą uwagę: przeniósł dzikie karty do parametru. To zadziała, ale imo to niewłaściwy sposób to zrobić. –

+0

@Myhiad: Zauważ, że jest tylko? po operatorze podobnym, bez znaków wieloznacznych i bez apostrofów. – Guffa

-5

W przeszłości, kiedy to zrobić, ja po prostu zintegrować go do sql, upewniając się, że mogę wymienić apostrofów ze znakami zapytania do czynienia z SQL injection. Np .:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'", 
    TABLE, 
    NAME, 
    JOHN.Replace("'","?")); 
+1

Byłoby lepiej, aby zastąpić pojedyncze cudzysłowy z dwoma apostrofami, tak że uzasadnione wyszukiwań w tym cytaty faktycznie pracują. 'Wymienić („"” ««»») ' – Blorgbeard

+2

naraża do SQL ataku wstrzyknięcia – Ricibald

4
var SQL = string.Format("SELECT * FROM {0} WHERE {1} LIKE '%' + ? + '%'", TABLE, NAME); 
Cmd.CommandText = SQL; 
Cmd.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "JOHN"; 
+0

czy ten kod jest prawidłowy dla Firebird? –

+0

Nie widziałem wymogu firebirda. Zaktualizowałem sql, aby upewnić się, że wszystko jest w porządku, ale kod parametru jest nieprawidłowy, ponieważ wyliczenie SqlDbType było przeznaczone dla serwera Sql. Nadal lubię unikać AddWithValue, chociaż –

+0

to po prostu nie działa dla mnie. Otrzymuję następujący błąd; FirebirdSql.Data.FirebirdClient.FbException: błąd dynamicznego SQL ocena wyrażeń nie jest obsługiwana ----> FirebirdSql.Data.Common.IscException: Wyjątek typu "FirebirdSql.Data.Common.IscException" został zgłoszony. –