2010-05-30 5 views
11

Avrei bisogno di analizzare query SQL parziali (è per uno strumento di controllo dell'iniezione SQL). Per esempioSQL parziale di Lexing in C#

'1' AND 1=1-- 

dovesse rompere verso il basso in token come

[0] => [SQL_STRING, '1'] 
[1] => [SQL_AND] 
[2] => [SQL_INT, 1] 
[3] => [SQL_AND] 
[4] => [SQL_INT, 1] 
[5] => [SQL_COMMENT] 
[6] => [SQL_QUERY_END] 

Sono loro qualsiasi almeno lexer per SQL che Baso la mia off del o dei buoni strumenti come il bisonte per C# (anche se preferirei non scrivere la mia grammatica in quanto ho bisogno di supportare la maggior parte se non tutta la grammatica di MySQL 5)

+3

Sede [parsing del codice SQL in C#] (http://stackoverflow.com/questions/589096/parsing-sql-code-in-c) e [Parsing SQL NET] (http://stackoverflow.com/questions/76083/parsing-sql-in-net). –

+3

Non si desidera scrivere da solo un parser SQL per un vero dialetto SQL come MySQL. Ottieni un'implementazione da un fornitore che la fornisce. –

+6

Come descritto in questa risposta: http://stackoverflow.com/questions/76083/parsing-sql-in-net/76151#76151, si potrebbe semplicemente usare ANTLR, un generatore di parser OO, e usare il file dialetto MySQL da qui : http://www.antlr.org/grammar/list. Pronto all'uso. –

risposta

2

Sembra che ci siano alcuni parser buoni là fuori.

Questo SO articolo ha un campione utilizzando Entity Framework di Microsoft:
Parsing SQL code in C#

Sembra che qualcun altro rotolò proprio e metterlo sul Codice Progetto:
http://www.codeproject.com/KB/dotnet/SQL_parser.aspx

Personalmente, mi piacerebbe andare con la soluzione Entity Framework, dal momento che è stata creata e gestita da MS, ma probabilmente è anche strettamente collegata a SQL Server. Dato che stai guardando MySQL, potresti voler andare con la soluzione personalizzata su Code Project, poiché sono sicuro che puoi quindi codificare in più soluzioni personalizzate come richiede la grammatica.

Lo userò presto (per Oracle, non per MySQL), quindi per favore fate sapere alla comunità come funziona la soluzione!

UPDATE:
Sono appena tornato a questo e leggere i commenti ... su di ulteriore riflessione, Consiglio vivamente ANTLR, dal momento che supporta più grammatiche. Ancora una volta, non l'ho usato, quindi sarà bello sapere come ha funzionato, e sta a voi decidere.
https://stackoverflow.com/questions/76083/parsing-sql-in-net/76151

+1

Inoltre, ho cercato su Google "C# sql parser" per queste risposte. –

Problemi correlati