1

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.

4 Answers 4

1

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.

Sign up to request clarification or add additional context in comments.

Comments

1

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]

Comments

0

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.

Comments

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

1 Comment

To improve your answer try adding some explanation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.