2016-06-30 9 views
0

Hier ist ein Beispiel für die Verwendung von OleDbCommand und ExecuteNonQuery (ich nahm es aus einem Handbuch auf msdn.microsoft.com). Ich möchte die Abfrage überprüfen, die vor der Ausführung generiert wurde.Abfragetext herausfinden, bevor Sie ExecuteNonQuery() ausführen

private static void OleDbCommandPrepare(string connectionString) 
{ 
    using (OleDbConnection connection = new 
       OleDbConnection(connectionString)) 
    { 
     connection.Open(); 

     // Create the Command. 
     OleDbCommand command = new OleDbCommand(); 

     // Set the Connection, CommandText and Parameters. 
     command.Connection = connection; 
     command.CommandText = 
      "INSERT INTO dbo.Region (RegionID, RegionDescription) VALUES (?, ?)"; 
     command.Parameters.Add("RegionID", OleDbType.Integer, 4); 
     command.Parameters.Add("RegionDescription", OleDbType.VarWChar, 50); 
     command.Parameters[0].Value = 20; 
     command.Parameters[1].Value = "First Region"; 

     // Call Prepare and ExecuteNonQuery. 
     command.Prepare(); 

die Abfrage herausfinden, die hier ausgeführt wird

 command.ExecuteNonQuery(); 

     // Change parameter values and call ExecuteNonQuery. 
     command.Parameters[0].Value = 21; 
     command.Parameters[1].Value = "SecondRegion"; 
     command.ExecuteNonQuery(); 
    } 
} 

Gibt es eine Möglichkeit, es zu tun? Ich benutze PgSqlCommand - das ist PostgreSQL-Äquivalent von OleDbCommand und erhalten unbeschriebene Ausnahme. Ich war in der Lage, diese Abfrage zu erstellen und herauszufinden, was der Fehler war, indem ich Command.Parameters umblätterte und Fragesymbole in Command.CommandText durch die Werte von paremeter ersetzte, aber ich hoffe, dass es eine integrierte Methode zum Abrufen dieser Abfrage gibt.

+0

Verwandte: http://stackoverflow.com/questions/178857/oledb-ado-net-get-the-commands-text-with-all-parameters-replaced –

+0

Eine Möglichkeit, eine Abfrage zu beheben: http: // stackoverflow.com/questions/37670358/get-oledbcommandbuilder-s-generated-sql-commands/38118349#38118349 – plavozont

Antwort

1

Es gibt keine direkte Möglichkeit, Generierte Abfrage zu überprüfen, aber alternativ können Sie String-Format anstelle von Befehl verwenden.

var query= String.Format(
      "INSERT INTO dbo.Region (RegionID, RegionDescription) 
       VALUES ({0}, {1})", 20,"First Region"); 
command.CommandText = query;## Heading ## 

Andere Art und Weise Abfrage zu überprüfen, ist die Verwendung von Profiler das heißt im Falle von SQL Server SQL Profiler zeigt die Abfrage auf Datenbank machen gebrannt wird.

+0

Ist dies nicht anfällig für SQL-Injektion? –

+0

@ClodoaldoNETO - ja, es verursacht SQL-Injektion, aber das ist nur zu überprüfen, welche Abfrage generiert wird ... nur alternativ zu überprüfen, was Abfrage ist –

Verwandte Themen