在 Sql Kata 中获取原始 sql 字符串
Get raw sql string in Sql Kata
我使用 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 class)。
最简单的方法是:
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();
但这不是一个好的做法,正确的方法是使用带绑定的参数化查询来执行它。
如果你正在注入QueryFactory
依赖,你可以使用它的编译器:
var query = new Query("Users")... etc
var rawSQL = queryFactory.Compiler.Compile(query).RawSql;
我使用 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 class)。
最简单的方法是:
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();
但这不是一个好的做法,正确的方法是使用带绑定的参数化查询来执行它。
如果你正在注入QueryFactory
依赖,你可以使用它的编译器:
var query = new Query("Users")... etc
var rawSQL = queryFactory.Compiler.Compile(query).RawSql;