2015-11-24 14 views
6
string table = "City"; 
string query = "Select * from '"+table+"'"; 

Daje mi błąd podając nieprawidłowy symbol blisko”.Jak wstawić zmienną wewnątrz SELECT

jednak

string query = "Select * from City"; 

Daje właściwego wyjścia.

+0

zamień pojedyncze cudzysłowy na [] powinno działać – dawncode

+0

Czy sprawdziłeś wynik zapytania? Czy możesz to wypróbować - zapytanie łańcuchowe = "Wybierz * od" + tabela; –

+1

query = "Wybierz * od" + tabela; ale wierzcie mi, że to nie jest bezpieczne, jeśli zmienna tabeli nie jest literalnym ciągiem znaków. Nie buduj instrukcji sql łączących dane wejściowe odebrane z dowolnego źródła. –

Odpowiedz

5

Właśnie to

string query = "Select * from '"+table+"'"; 

być zastąpiony przez

string query = "Select * from " + table; 

Bo ciąg kwerendy nie jest "Select * from City"; Choć formuje "Select * from 'City'";

i tym samym otrzymujesz błąd

0

Można zrobić to działa tak:

string table ="City" 
string query = "Select * from "+table; 
+0

tęsknisz za ";" – MichaelMao

+0

tak, działa. Dziękuję – subhro

+0

@subhro, jeśli to zadziałało dla ciebie, to uprzejmie przyjmij to jako odpowiedź. –

2

Należy sformułować zapytanie, np. niskie.,

string table = "City"; 

//You don't need to have single quote... 

string query = " Select * From " + table; 

w celu wykorzystania Where stan zrobić jak poniżej.,

//Where clause only needs single quotes, to define the SQL parameter value in between... 

string query = " Select * From " + table + " Where CityId = '" + cityId + "'"; 

Nadzieja to pomaga.,

3

Najlepsza praktyka byłoby użyć string.Format

string table = "City"; 
string query = string.format("Select * from {0}", table); 
1

Najlepsza praktyka powinna być aby tego nie robić, bec ause jest podatny na złośliwy SQL injection. W każdym razie, jeśli masz kontrolę nad zmienną table, powinieneś zrobić to tak, jak sugerował @ madcow69, ale proponuję dodać separatory, więc zawsze masz ważny rozdzielony identyfikator (na przykład, jeśli nazwa twojego stołu to "zamów" "lub dowolne inne słowo zastrzeżone SQL).

string table = "City"; 
string query = string.format("Select * from [{0}]", table); 

Ale co jeśli table jest następujący ?:

string table = "City]; DROP DATABASE [YourDB"; 
0

Nadzieja to pomaga.,

string table = "City"; 

//You don't need to have single quote... 

string query = " Select * From " + table; 
0

Jeśli używasz .NET4.6 można użyć nowego „kompozytowe ciąg formatowania "funkcja wprowadzona z C# 6.0(read about it here).
ten pozwala napisać oświadczenie tak:

string query = $"Select * from {table}"; 

Jednak chciałbym silnie nie zalecamy pisanie zapytań, jak to i używać sql parameters. Pomoże to uniknąć ataków SQL Injection.

Powiązane problemy