根據這個問題:How does SQLParameter prevent SQL Injection?使用參數化查詢時可能看到在我的數據庫上執行的查詢嗎?
有沒有什麼辦法可以看到什麼查詢傳遞給我的數據庫,並執行參數化查詢時執行?
我沒有提供給我的SQL事件探查器,所以這不是一個選項。我希望有一種方法可以從Visual Studio中完成。可能?
根據這個問題:How does SQLParameter prevent SQL Injection?使用參數化查詢時可能看到在我的數據庫上執行的查詢嗎?
有沒有什麼辦法可以看到什麼查詢傳遞給我的數據庫,並執行參數化查詢時執行?
我沒有提供給我的SQL事件探查器,所以這不是一個選項。我希望有一種方法可以從Visual Studio中完成。可能?
嗯,這是真的沒有魔法或沒有黑色的藝術 - 在ADO.NET這樣的查詢:
string sqlStmt = "SELECT * FROM dbo.Customers WHERE country = @country";
using(SqlConnection _conn = new SqlConnection("server=.;database=Northwind;integrated security=SSPI;"))
using(SqlCommand _cmd = new SqlCommand(sqlStmt, _conn))
{
_cmd.Parameters.Add("@country", SqlDbType.VarChar, 100).Value = "Switzerland";
DataTable results = new DataTable();
using(SqlDataAdapter dap = new SqlDataAdapter(_cmd))
{
dap.Fill(results);
}
}
將被翻譯成此SQL Server上:
exec sp_executesql N'SELECT * FROM dbo.Customers WHERE country = @country',N'@country varchar(100)',@country='Switzerland'
基本上,ADO .NET/SQL Server做而不是像許多人認爲的那樣替換SQL語句字符串中的參數 - 它實際上作爲參數化查詢傳遞給SQL Server,以及參數列表和它們的值。
此SQL語句從SQL事件探查器拍攝 - 我不知道你能怎麼回事看到查詢......
爲什麼你不能使用SQL事件探查器?我的意思是 - 它在每一個SQL Server副本中,甚至有免費的使用免費的SQL Server Express版本的SQL Express Profiler ......
我不相信你可以在Visual Studio中訪問這類內容該翻譯將在ADO.NET庫內部發生,但上面提到的答案marc_s是正確的。您可以通過查看傳入事務(如果有可用的話)來使用SQL Server Management Studio來驗證這一點。
實際上 - 甚至連ADO.NET都沒有進行任何翻譯 - 它被髮送到SQL Server作爲參數化查詢執行 - 不會使用它們的值替換參數! (一種常見的誤解......) –
沒有黑魔法!?這是最後一根稻草。我正在成爲一名會計師。 –
+1,沒有聽說過Express Profiler! –
@Abe Miessler:好的,一點點深灰色的魔法,好嗎? :-) –