Rufen Sie SqlCommand / OleDbCommand Abfrage nach Parametern eingefügt?
-
18-09-2019 - |
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 schreibenLö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.