dynamisches SQL

20/06/2008 - 16:18 von Frederic Luchting | Report spam
Hallo ihr,

ich möchte für eine Webanwendung so etwas wie
den QueryAnalizer anbieten. Also eine Textbox
in der man SQL eingeben kann und ein GridView,
das das Ergebnis anzeigt. Dafür wird ein eigener
Connectionstring verwendet, der nur Lesen darf.

Mein Code sieht so aus:
string sql = "SELECT * FROM tblName";
SqlConnection con = new SqlConnection("...");
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataAdapter ad = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ad.Fill(ds);
LabelResult.Text = ds.Tables[0].Rows.Count.ToString();
-

So funktioniert der Code bei mir und beim
Provider fantastisch. Wenn ich aber die
erste Zeile àndere und den String aus der
Textbox nehmen will

string sql = TextBoxCommand.Text;

dann geht das bei mir immer noch aber wenn ich
die Seite online aufrufen will, kommt ein Timeout.
Auch ein try/catch aussenrum àndert nichts.

Gibt es eine Einstellung beim Provider, die
erkennen kann, dass das sql nicht hardcoded
ist sondern von Benutzereingaben kommt?

Vielen Dank und Gruß

Frederic
 

Lesen sie die antworten

#1 Gerold Mittelstädt
20/06/2008 - 16:52 | Warnen spam
Hallo,

Frederic Luchting schrieb:
ich möchte für eine Webanwendung so etwas wie
den QueryAnalizer anbieten. Also eine Textbox
in der man SQL eingeben kann und ein GridView,
das das Ergebnis anzeigt. Dafür wird ein eigener
Connectionstring verwendet, der nur Lesen darf.

Mein Code sieht so aus:
string sql = "SELECT * FROM tblName";
SqlConnection con = new SqlConnection("...");
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataAdapter ad = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ad.Fill(ds);
LabelResult.Text = ds.Tables[0].Rows.Count.ToString();
-

So funktioniert der Code bei mir und beim
Provider fantastisch. Wenn ich aber die
erste Zeile àndere und den String aus der
Textbox nehmen will

string sql = TextBoxCommand.Text;

dann geht das bei mir immer noch aber wenn ich
die Seite online aufrufen will, kommt ein Timeout.
Auch ein try/catch aussenrum àndert nichts.



Das könnte in die Anfragevalidierung rennen und hàngen bleiben.

Gibt es eine Einstellung beim Provider, die
erkennen kann, dass das sql nicht hardcoded
ist sondern von Benutzereingaben kommt?



Wird .NET-intern über validateRequest geregelt.
http://msdn.microsoft.com/en-us/lib...quest.aspx

Normal sollte da aber ein Fehler geworfen werden und kein Timeout.
Mit Try-Catch kann man da allerdings nichts machen. Das làuft letztlich
in die globale Fehlerbehandlung (global.asmx). Evtl. hast Du da einen
Fehler drin, der letztlich das Timeout verursacht?

Viele Grüße!

Ähnliche fragen