插入参数后检索SqlCommand / OleDbCommand查询?

时间:2009-12-10 16:09:30

标签: sql parameters oledb sqlcommand oledbcommand

有没有办法访问发送到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

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

4 个答案:

答案 0 :(得分:1)

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

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

然后我为查询和日志记录功能使用了该字符串。

答案 1 :(得分: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]

答案 2 :(得分:0)

我试图搜索一段时间,但是找不到使用该库来获取已插入参数的sql语句。我能想到的最好的是sql server中的SQL Server Profiler。如果您打开它并检查TSQL菜单下的选项SQL:StmtCompleted和存储过程菜单下的SP: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捕获插入的参数肯定会更好。我将继续看看是否有解决方案,因为我自己想要这个功能几次。

答案 3 :(得分:0)

function submit () {
  alert('form submitted!')
}

<form class="rds-form" onsubmit="submit()">
  <input /><button type="submit">Submit</button>
</form>