English 中文(简体)
Retrieve SqlCommand/OleDbCommand query after inserting parameters?
原标题:

Is there any way to access the prepared statement as sent to the 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)

I m looking for a way to access the prepared query after the parameters have been added. After preparing the command, CommandText still contains the base query UPDATE Items SET [Saved Value]=@SavedValue WHERE ID=@ID even though the parameters have been passed.

I would find it useful to write a log of queries preformed by this chunk of code for debugging other areas of this application.

最佳回答

I never found a way to log the query using the parameters functionality. I ended up reverting to creating the query in a string, then consuming said string:

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

I then consumed that string for both the query and logging functions.

问题回答

I needed something like that. I ve built a method that can do the trick, it s not perfect, but it does help:

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

This gives something like:

SQL=SELECT f1,f2 FROM table WHERE fx = ? AND fy = ? [20,35]

I tried to search around for a while and couldn t find to use that library to get a sql statement returned that had the parameters inserted. The best I was able to come up with was the SQL Server Profiler in sql server. If you turn it on and check the option SQL:StmtCompleted under the TSQL menu and SP:StmtCompleted under the Stored Procedures menu you will see event textdata columns like this:

SQL:StmtCompleted

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

SP:Completed

SELECT *
FROM Table1
WHERE User_ID = @User_ID

Since you were looking for a way to log your queries and their respective input parameters this might be useful- however, it would definitely be better if UpdateCommand.CommandText captured the inserted parameters. I will continue to see if a there is a solution out there as i have wanted this functionality several times myself.

string commandString = UpdateCommand.CommandText;
foreach (OleDbParameter parameter in UpdateCommand.Parameters)
    commandString = commandString.Replace("@" + parameter.ParameterName.ToString(), parameter.Value.ToString());




相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签