Recupera SqlCommand interrogazione / OleDbCommand dopo aver inserito i parametri?
-
18-09-2019 - |
Domanda
C'è un modo per accedere alla dichiarazione preparata come inviato al server 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)
Sto cercando un modo per accedere alla query preparata dopo che sono stati aggiunti i parametri. Dopo aver preparato il comando, CommandText contiene ancora il UPDATE Items SET [Saved Value]=@SavedValue WHERE ID=@ID
query di base, anche se sono stati passati i parametri.
Vorrei trovare utile scrivere un log delle query preformati da questo pezzo di codice per il debug di altre aree di questa applicazione.
Soluzione
Non ho mai trovato un modo per registrare la query utilizzando la funzionalità di parametri. Ho finito tornando a creare la query in una stringa, quindi consumando detto stringa:
QueryString = String.Format("UPDATE Items SET [Saved Value]={0} WHERE ID={1}", SavedValue, ID)
Poi ho consumato quella stringa per entrambe le funzioni di query e di logging.
Altri suggerimenti
Avevo bisogno di qualcosa di simile. Ho costruito un metodo che può fare il trucco, non è perfetto, ma aiuta:
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
Questo dà qualcosa di simile:
SQL=SELECT f1,f2 FROM table WHERE fx = ? AND fy = ? [20,35]
Ho provato a cercare in giro per un po 'e non poteva trovare di usare quella libreria per ottenere un'istruzione SQL tornato che aveva i parametri inseriti. Il meglio che è stato in grado di venire con era lo SQL Server Profiler in SQL Server. Se lo si accende e verificate la SQL:StmtCompleted
opzione nel menu del TSQL e SP:StmtCompleted
sotto il menu Stored procedure si vedrà evento TextData colonne come questo:
SQL: StmtCompleted
EXEC @return_value = [dbo].[ap_test]
@User_ID = N'testuser'
SP: Completato
SELECT *
FROM Table1
WHERE User_ID = @User_ID
Dal momento che stavate cercando un modo per registrare le vostre domande e le loro rispettive parametri di input che questo potrebbe essere utile- tuttavia, sarebbe sicuramente meglio se UpdateCommand.CommandText
catturato i parametri inseriti. Continuerò a vedere se un c'è una soluzione là fuori come ho voluto questa funzionalità più volte io stesso.