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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top