2012-10-03 24 views
1
被用於

我正在尋找一種方式,我怎麼能顯示執行後的查詢字符串時,參數在VB.net被用於..如何顯示執行後的查詢字符串時,參數在VB.net

例如:

Using con As New SqlConnection(strConnect) 
con.Open() 
Using com As New SqlCommand("INSERT INTO myTable (myColumn1, myColumn2) VALUES (@C1, @C2)", con) 
    com.Parameters.AddWithValue("@C1", myValueForColumn1) 
    com.Parameters.AddWithValue("@C2", myValueForColumn2) 
    com.ExecuteNonQuery() 
End Using 
End Using 

,所以我希望不要有參數

+0

我認爲你的選擇是相當有限的。簡單的「一次性」方法是在執行查詢之後編寫一個方法,該方法使用SQLCommand對象並通過參數集合進行自旋,從而將sql字符串變量中的參數文字替換爲實際值。這顯然將用於顯示和/或記錄。你可能會喜歡,甚至使用一個方面來做這個方法,通過Unity或PostSharp進行數據訪問。 – codechurn

回答

2

你正在尋找不存在的查詢字符串,以顯示查詢字符串的實際值。它在任何時候都不會被創建。參數化查詢的全部目的是使參數中的數據爲從不將抽取到命令文本中,以便像';DROP TABLE myTable;--這樣的數據輸入永不有機會被視爲代碼。

記住:參數化查詢不會對輸入進行消毒處理:它們隔離它們。

如果您想了解發生了什麼事情,把它詳細,如果你正在運行一個像這樣的SQL過程:

DECLARE @C1 nvarchar(50); 
DECLARE @C2 nvarchar(50); 

Set @C1 = imaginaryFunctionToGetValueFromDataSegmentOfConnection(1); 
Set @C2 = imaginaryFunctionToGetValueFromDataSegmentOfConnection(2); 

INSERT INTO myTable (myColumn1, myColumn2) VALUES (@C1, @C2); 

所涉及的實際機理sp_executesql,如果你想了解更多的信息。如果你想得到一個真正的調試查詢,我的建議是編寫代碼來實際構建類似上面的代碼片段,用您的值代替函數調用。

+0

感謝Joel Coehoorn ...我想我必須手動完成,因爲我需要將查詢字符串保存在數據庫中以用於審計跟蹤目的,並且我堅持在查詢中使用參數 – Ali

+2

@Sali大多數數據庫已經有保存這個選項的選項一種審計。也許你可以看看數據庫解決方案,而不是.net。 –

+0

@the_lotus:Tq,你說得對。我會嘗試在數據庫級別執行此操作 – Ali