【问题标题】:Retrieve SqlCommand/OleDbCommand query after inserting parameters?插入参数后检索 SqlCommand/OleDbCommand 查询?
【发布时间】:2009-12-10 16:09:29
【问题描述】:

有什么方法可以访问发送到 SQL 服务器的准备好的语句?

            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,即使参数已被传递。

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

【问题讨论】:

    标签: sql parameters oledb sqlcommand oledbcommand


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我需要这样的东西。我已经建立了一个可以解决问题的方法,它并不完美,但它确实有帮助:

      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】:

        我尝试搜索了一段时间,但找不到使用该库来获取返回的插入参数的 sql 语句。我能想到的最好的方法是 sql server 中的 SQL Server Profiler。如果您打开它并选中 TSQL 菜单下的选项 SQL:StmtCompleted 和存储过程菜单下的 SP:StmtCompleted,您将看到如下事件文本数据列:

        SQL:StmtCompleted

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

        SP:已完成

        SELECT *
        FROM Table1
        WHERE User_ID = @User_ID
        

        由于您正在寻找一种方法来记录您的查询及其各自的输入参数,这可能很有用 - 但是,如果UpdateCommand.CommandText 捕获插入的参数肯定会更好。我将继续查看是否有解决方案,因为我自己多次想要此功能。

        【讨论】:

          【解决方案4】:
          string commandString = UpdateCommand.CommandText;
          foreach (OleDbParameter parameter in UpdateCommand.Parameters)
              commandString = commandString.Replace("@" + parameter.ParameterName.ToString(), parameter.Value.ToString());
          

          【讨论】:

          • 要改进您的答案,请尝试添加一些解释。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-05
          • 2017-06-03
          相关资源
          最近更新 更多