Frage

Gibt es eine Möglichkeit die vorbereitete Anweisung für den Zugriff über den SQL-Server gesendet?

            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)

Ich bin auf der Suche nach einer Möglichkeit, die vorbereitete Abfrage zuzugreifen, nachdem die Parameter hinzugefügt wurden. Nachdem Sie den Befehl vorbereitet, enthält Command noch die Basisabfrage UPDATE Items SET [Saved Value]=@SavedValue WHERE ID=@ID obwohl die Parameter übergeben wurden.

Ich würde es für sinnvoll ein Protokoll der Abfragen dieses Stück Code für die Fehlersuche in anderen Bereichen dieser Anwendung.

vorgeformten zu schreiben
War es hilfreich?

Lösung

Ich habe nie eine Möglichkeit, die Abfrage mit dem Parameter Funktionalität zu protokollieren. Ich landete auf Zurücksetzen die Abfrage in einem String erstellen, dann aufwendig sagte string:

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

ich verbrauchen dann diese Zeichenfolge sowohl für die Abfrage und Logging-Funktionen.

Andere Tipps

Ich brauchte so etwas. Ich habe eine Methode gebaut, die den Trick tun, es ist nicht perfekt, aber es funktioniert Hilfe:

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

Das gibt so etwas wie:

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

Ich habe versucht, für eine Weile suchen um und konnte nicht die Bibliothek benutzen finden eine SQL-Anweisung zu erhalten zurückgegeben, dass die Parameter hatte eingefügt. Das Beste, was ich konnte, um mit dem SQL Server Profiler in SQL Server war. Wenn Sie es einschalten und aktivieren Sie die Option SQL:StmtCompleted unter dem TSQL-Menü und SP:StmtCompleted unter dem Menü Stored Procedures Sie Ereignis Textdaten Spalten wie diese:

SQL: StmtCompleted

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

SP: abgeschlossen

SELECT *
FROM Table1
WHERE User_ID = @User_ID

Da Sie nach einem Weg, wurden Ihre Fragen und ihre jeweiligen Eingabeparameter zu protokollieren dies jedoch Nützlich- sein könnte, wäre es auf jeden Fall besser, wenn UpdateCommand.CommandText die eingefügten Parameter erfasst. Ich werde auch weiterhin sehen, ob ein eine Lösung aus gibt es, wie ich diese Funktionalität selbst mehrmals gewünscht habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top