2009-12-10 28 views
1

有沒有任何方法可以訪問發送到SQL服務器的預準備語句?插入參數後檢索SqlCommand/OleDbCommand查詢?

  Dim params(1) As OleDb.OleDbParameter 
      params(0) = New OleDb.OleDbParameter("@ID", OleDb.OleDbType.VarChar, 50) 
      params(0).Value = guiItemsGridView.Rows(e.RowIndex).Cells("ID").Value 
      params(1) = New OleDb.OleDbParameter("@SavedValue", OleDb.OleDbType.VarChar, 50) 
      params(1).Value = guiItemsGridView.Rows(e.RowIndex).Cells("Saved Value").Value 

      Dim QueryString As String = "UPDATE Items SET [Saved Value][email protected] WHERE [email protected]" 
      myDatabase.objAdapter.UpdateCommand = New OleDb.OleDbCommand(QueryString, DatabaseConnection) 

      myDatabase.objAdapter.UpdateCommand.Parameters.AddRange(params) 
      myDatabase.objAdapter.UpdateCommand.Prepare() 

      Debug.Print(myDatabase.objAdapter.UpdateCommand.CommandText) 

我在查找添加參數後訪問準備好的查詢的方法。準備完命令後,即使參數已通過,CommandText仍包含基本查詢UPDATE Items SET [Saved Value][email protected] WHERE [email protected]

我會發現寫這個代碼塊用於調試此應用程序的其他區域所執行的查詢日誌很有用。

回答

1

我從來沒有找到使用參數功能記錄查詢的方法。最後我恢復到創建一個字符串的查詢,而消耗的說字符串:

QueryString = String.Format("UPDATE Items SET [Saved Value]={0} WHERE ID={1}", SavedValue, ID)

我那麼消耗的字符串無論是查詢和記錄功能。

0

我試着搜索了一會兒,找不到使用該庫來獲取返回的插入參數的sql語句。我能夠想到的最好的就是SQL Server中的SQL Server Profiler。如果你打開它,並在TSQL菜單和SP:StmtCompleted下勾選SQL:StmtCompleted存儲過程菜單下你會看到事件的TextData這樣的列:

SQL:StmtCompleted事件

EXEC @return_value = [dbo].[ap_test] 
     @User_ID = N'testuser' 

SP:完成

SELECT * 
FROM Table1 
WHERE User_ID = @User_ID 

由於您正在尋找一種方法來記錄您的查詢和它們各自的輸入參數,這可能會有用 - 但是,如果UpdateCommand.CommandText捕獲插入的參數,它肯定會更好。我會繼續看看是否有解決方案,因爲我自己已經多次想要這個功能。

1

我需要這樣的東西。我已經建立了可以做的伎倆的方法,它並不完美,但它確實有助於:

VB .NET:

Public Sub LogSQL(ByVal cmd As OleDb.OleDbCommand) 
    Dim pars As String = "" 
    If cmd.Parameters.Count > 0 Then 
     pars = " [" 
     Dim a As Integer 
     For a = 0 To cmd.Parameters.Count - 1 
      pars = pars + cmd.Parameters(a).Value.ToString + "," 
     Next 
     pars = Left(pars, Len(pars) - 1) + "]" 
    End If 
    Log("SQL=" + cmd.CommandText + pars, LogNivel.INFO) 
End Sub 

這給了像:

SQL=SELECT f1,f2 FROM table WHERE fx = ? AND fy = ? [20,35]