4 votes

Obtenir une chaîne de caractères SQL brute dans Sql Kata

J'utilise SqlKata uniquement pour construire des requêtes SQL en C#. Je souhaite prendre la sortie de mes requêtes construites en C#. Query Le logiciel de gestion de la base de données SQL, récupère la chaîne sql brute (compilée) et l'exécute contre SQL.

J'ai pensé que cela suffirait :

var factory = new QueryFactory(null, new SqlServerCompiler());
var query = new Query();
...
var sqlText = factory.Compiler.Compile(query).Sql;

Mais ceci donne ceci :

SELECT TOP (@p0) [AllStarFull].[GameNumber], [AllStarFull].[LeagueId], [AllStarFull].[PlayedInGame] FROM [AllStarFull]

Une exception est levée parce que (@p0) est un paramètre et non la valeur réelle.

Dans la documentation, il est indiqué d'introduire Logger mais je n'ai pas vraiment besoin de la fonctionnalité de journalisation (pour l'instant).

https://sqlkata.com/docs/execution/logging

var db = new QueryFactory(connection, new SqlServerCompiler());

// Log the compiled query to the console
db.Logger = compiled => {
    Console.WriteLine(compiled.ToString());
};

var users = db.Query("Users").Get();

Existe-t-il un moyen d'obtenir la chaîne sql brute à partir du fichier Query avec tous les paramètres renseignés ?

6voto

Ahmad Points 4329

Si vous avez seulement besoin de construire le code SQL, il n'est pas nécessaire d'inclure le fichier SqlKata.Execution (qui inclut la classe QueryFactory).

La méthode la plus simple est la suivante :

using SqlKata;
using SqlKata.Compilers;

// Create an instance of SQLServer
var compiler = new SqlServerCompiler();

var query = new Query("Users").Where("Id", 1).Where("Status", "Active");

SqlResult result = compiler.Compile(query);

string sql = result.Sql;
List<object> bindings = result.Bindings; // [ 1, "Active" ]

comme indiqué dans la documentation, vous pouvez utiliser l'option result.ToString() pour obtenir la requête complète

var sql = result.ToString();

mais ce n'est pas une bonne pratique, la bonne façon est d'utiliser la requête paramétrée avec des bindings pour l'exécuter.

extrait de https://sqlkata.com/docs#compile-only-example

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