1

有什么方法可以访问发送到 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)

我正在寻找一种在添加参数后访问准备好的查询的方法。UPDATE Items SET [Saved Value]=@SavedValue WHERE ID=@ID准备好命令后,即使参数已传递,CommandText 仍包含基本查询。

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

4

4 回答 4

1

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

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

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

于 2009-12-30T15:19:25.310 回答
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]
于 2013-04-09T14:36:05.277 回答
0

我试图搜索一段时间,但找不到使用该库来获取返回的插入参数的 sql 语句。我能想到的最好的方法是 sql server 中的 SQL Server Profiler。如果您打开它并检查SQL:StmtCompletedTSQL 菜单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捕获插入的参数肯定会更好。我将继续查看是否有解决方案,因为我自己多次想要此功能。

于 2009-12-15T23:28:45.580 回答
0
string commandString = UpdateCommand.CommandText;
foreach (OleDbParameter parameter in UpdateCommand.Parameters)
    commandString = commandString.Replace("@" + parameter.ParameterName.ToString(), parameter.Value.ToString());
于 2020-09-24T23:21:04.407 回答