代码之家  ›  专栏  ›  技术社区  ›  Greg Buehler

是否在插入参数后检索sqlcommand/oledbcommand查询?

  •  1
  • Greg Buehler  · 技术社区  · 15 年前

    是否有任何方法可以访问发送到SQL Server的已准备语句?

                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]=@SavedValue WHERE ID=@ID"
                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]=@SavedValue WHERE ID=@ID 即使参数已经传递。

    我会发现编写一个由这段代码执行的查询日志对于调试这个应用程序的其他区域很有用。

    3 回复  |  直到 12 年前
        1
  •  1
  •   Greg Buehler    15 年前

    我从未找到使用参数功能记录查询的方法。我最终恢复到在字符串中创建查询,然后使用所述字符串:

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

    然后,我将该字符串用于查询和日志记录功能。

        2
  •  1
  •   slm Vikas Hardia    12 年前

    我需要那样的东西。我已经建立了一种方法,可以实现这个技巧,这并不完美,但它确实有帮助:

    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]
    
        3
  •  0
  •   Dostee    15 年前

    我试图四处搜索一段时间,但找不到使用该库来获取返回的已插入参数的SQL语句。我能想到的最好的是SQL Server中的SQL Server事件探查器。如果你打开它并检查选项 SQL:StmtCompleted 在tsql菜单下 SP:StmtCompleted 在“存储过程”菜单下,您将看到如下事件文本数据列:

    SQL:stmt已完成

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

    SP:已完成

    SELECT *
    FROM Table1
    WHERE User_ID = @User_ID
    

    因为您正在寻找一种记录查询及其各自输入参数的方法,所以这可能很有用——但是,如果 UpdateCommand.CommandText 已捕获插入的参数。我将继续查看是否有解决方案,因为我自己已经多次需要这个功能。