2011-07-07 36 views

回答

4

嗯,這是真的沒有魔法或沒有黑色的藝術 - 在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 ......

+1

沒有黑魔法!?這是最後一根稻草。我正在成爲一名會計師。 –

+0

+1,沒有聽說過Express Profiler! –

+1

@Abe Miessler:好的,一點點深灰色的魔法,好嗎? :-) –

0

我不相信你可以在Visual Studio中訪問這類內容該翻譯將在ADO.NET庫內部發生,但上面提到的答案marc_s是正確的。您可以通過查看傳入事務(如果有可用的話)來使用SQL Server Management Studio來驗證這一點。

+0

實際上 - 甚至連ADO.NET都沒有進行任何翻譯 - 它被髮送到SQL Server作爲參數化查詢執行 - 不會使用它們的值替換參數! (一種常見的誤解......) –

相關問題