2012-11-04 31 views
3

參數被替換後是否可以看到sql語句?添加參數後的SQL語句

using(SqlCommand cmdInsert = new SqlCommand("INSERT INTO Table(Value_fkey) VALUES(@ValueKey)", Database.Connection)) 
{ 
    cmdInsert.Parameters.AddWithValue("@ValueKey", ValueKey); 
    System.Convert.ToInt32(cmdInsert.ExecuteScalar()); 
} 

我想它記錄我的SQL語句,所以寧可不通過SQL服務器,但我不介意是否是前或調用後聲明。

+1

參數沒有真正得到「替換」,他們只是習慣了作爲參數。您可以循環訪問現有參數並隨時查看它們的值。 – cbp

+0

可能的重複http://stackoverflow.com/questions/2611446/what-sql-is-being-sent-from-a-sqlcommand-object –

+1

使用分析器看看會發生什麼。您將看到一個事件準備好該語句,另一個使用該準備好的語句的另一個/按照ID進行準備。沒有替代品。 – MatBailie

回答

2

這似乎是做那麼最簡單的方法:

public void OutputSQLToTextFile(SqlCommand sqlCommand) 
{ 
     string query = sqlCommand.CommandText; 
     foreach (SqlParameter p in sqlCommand.Parameters) 
     { 
      query = query.Replace(p.ParameterName, p.Value.ToString()); 
     } 
     OutputToTextFile(query); 
    } 
+1

不幸的是,當使用諸如'@ Par'和'@ ParAdditional'等組合名稱的參數時,這是錯誤的。在這種情況下,Replace方法將替換'「@Par」',所以我們可以在第二個參數[valuie]中加入。 – peterboccia

+0

@peterboccia如果在更換之前將參數從最長到最短排序,該怎麼辦? – jocull