4 votes

Comment capturer le SQL avec des paramètres substitués ? (.NET, SqlCommand)

Existe-t-il un moyen simple de récupérer une instruction SQL complète après la substitution de paramètres ? Je veux garder un fichier journal de tous les SQL que ce programme exécute.

Ou bien, si je veux faire cela, dois-je simplement me débarrasser des paramètres et faire toute la requête à l'ancienne, dans une seule grande chaîne ?

Exemple simple : Je veux capturer la sortie :

SELECT subcatId FROM EnrollmentSubCategory WHERE catid = 1

de ce code :

    Dim subCatSQL As String = "SELECT subcatId FROM EnrollmentSubCategory WHERE catid = @catId"
    Dim connectionString As String = "X"
    Dim conn As New SqlConnection(connectionString)
    If conn.State = ConnectionState.Closed Then
        conn.Open()
    End If
    Dim cmd As New SqlCommand(subCatSQL, conn)
    With cmd
        .Parameters.Add(New SqlParameter("@catId", SqlDbType.Int, 1)) 
    End With

    Console.WriteLine("Before: " + cmd.CommandText)
    cmd.Prepare()
    Console.WriteLine("After: " + cmd.CommandText)

J'avais supposé que Prepare() ferait les substitutions, mais apparemment non.

Réflexions ? Des conseils ? Merci d'avance.

0voto

JoeGeeky Points 1436

Vous pourriez construire un emballage autour de la System.Data.SqlClient Provider (*Ex. le provider enregistré dans le fichier de configuration comme...) * providerName="System.Data.SqlClient" ). Essentiellement un proxy d'interception, vous auriez accès à toutes les informations passant par le fournisseur et pourriez siphonner ce dont vous avez besoin, l'agréger et/ou l'enrichir et l'envoyer aux journaux. C'est un peu plus avancé mais cela ouvre la porte à la capture de toute une série d'informations et pourrait être inséré/remplacé/supprimé comme une couche de préoccupation distincte.

0voto

George Birbilis Points 183

Essayez le paquet CommandAsSql NuGet

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X