Search code examples
sqlparametersoledbsqlcommandoledbcommand

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.


Solution

  • 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.