2009-12-10 27 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]