gpt4 book ai didi

c# - 在 Sql Kata 中获取原始 sql 字符串

转载 作者:行者123 更新时间:2023-12-03 21:19:06 27 4
gpt4 key购买 nike

我纯粹使用 SqlKata 在 C# 中构建 sql 查询。我想获取我构建的 Query 的输出,获取原始(已编译)的 sql 字符串,并针对 SQL 执行它。

我认为这会做到这一点:

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

但这给出了这个:
SELECT TOP (@p0) [AllStarFull].[GameNumber], [AllStarFull].[LeagueId], [AllStarFull].[PlayedInGame] FROM [AllStarFull]

这会引发异常,因为 (@p0)是一个参数,而不是实际值。

在文档中,它提到引入 Logger但我真的不需要日志功能(现在)。

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();

有没有办法从 Query 获取原始 sql 字符串?填充所有参数?

最佳答案

如果您只需要构建 SQL,则无需包含 SqlKata.Execution包(其中包括 QueryFactory 类)。

最简单的方法是:

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" ]

如文档中所述,您可以使用 result.ToString()获取完整的查询
var sql = result.ToString();

但这不是一个好的做法,正确的方法是使用带有绑定(bind)的参数化查询来执行它。

取自 https://sqlkata.com/docs#compile-only-example

关于c# - 在 Sql Kata 中获取原始 sql 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56572487/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com