2016-06-30 48 views
0

這是一個使用OleDbCommand和ExecuteNonQuery(我從msdn.microsoft.com手冊中獲取它)的例子。我想查看執行之前生成的查詢。在做ExecuteNonQuery()之前找出查詢文本

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(); 

發現,這裏正在執行

 command.ExecuteNonQuery(); 

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

是否有任何可能的方式來做到這一點查詢?我正在使用PgSqlCommand - 這是PostgreSQL相當於OleDbCommand並得到了未描述的異常。我能夠通過循環Command.Parameters並使用參數表的值替換Command.CommandText中的問題符號來查找錯誤並找出錯誤,但我希望有一個內置方法來獲取該查詢。

+0

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

+0

一種修復查詢的方法:http:// stackoverflow.com/questions/37670358/get-oledbcommandbuilder-s-generated-sql-commands/38118349#38118349 – plavozont

回答

1

沒有直接的方法來檢查生成的查詢,但替代方法是你可以使用字符串格式而不是命令。

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

檢查查詢另一種方法是使用探查即在SQL Server SQL事件探查器的情況下顯示了查詢數據庫解僱。

+0

這不容易SQL注入? –

+0

@ClodoaldoNeto - 是的,它會導致SQL注入,但這只是爲了檢查生成的查詢...只是替代檢查什麼是查詢 –

相關問題