SqlBuilder 返回错误结果
SqlBuilder returning wrong result
我有一个使用 Npgsql
和 Postgres
的查询。为了构建我的查询,我使用 Dapper 及其 SqlBuilder。
当我在数据库中进行正常语句时,它返回了正确的结果。当我通过 SqlBuilder 执行此操作时,它返回了错误的结果。
我尝试了不同的方法,更改了 addTemplate
或参数,但没有任何改变。
我还尝试以不同的方式更改 builder.Where("period = @period", new { model.Period });
行:
builder.Where("period = @Period", new { model.Period });
builder.Where("period = period", new { model.Period });
builder.Where("period = @TestPeriod", new { TestPeriod = model.Period });
或者这是更常见的方式:
builder.Where("period = '" + model.Period + "'");
using (NpgsqlConnection con = Helper.GetNpgsqlConnection())
{
var builder = new SqlBuilder();
var selector = builder.AddTemplate("SELECT * FROM szzRecord.folders /**where**/");
if (model.Period != null)
builder.Where("period = @period", new { model.Period });
var result = con.Query(selector.RawSql);
return result;
}
例如,正常 sql 查询的结果:SELECT * FROM szzRecord.folders WHERE period = 24
返回 251 行 - 这是正确的。
dapper查询的结果是1223,都是行。所以看起来该参数不存在。在期待 selector
时,我找到了 period
的参数。我在selector.parameters.templates[0]
中找到了Period = 24
。这个对吗? selector.parameters.parameters
为空。
您需要将 SqlBuilder
的参数传递到您的查询中。你有:
var result = con.Query(selector.RawSql);
将此更改为:
var result = con.Query(selector.RawSql, selector.Parameters);
我有一个使用 Npgsql
和 Postgres
的查询。为了构建我的查询,我使用 Dapper 及其 SqlBuilder。
当我在数据库中进行正常语句时,它返回了正确的结果。当我通过 SqlBuilder 执行此操作时,它返回了错误的结果。
我尝试了不同的方法,更改了 addTemplate
或参数,但没有任何改变。
我还尝试以不同的方式更改 builder.Where("period = @period", new { model.Period });
行:
builder.Where("period = @Period", new { model.Period });
builder.Where("period = period", new { model.Period });
builder.Where("period = @TestPeriod", new { TestPeriod = model.Period });
或者这是更常见的方式:
builder.Where("period = '" + model.Period + "'");
using (NpgsqlConnection con = Helper.GetNpgsqlConnection())
{
var builder = new SqlBuilder();
var selector = builder.AddTemplate("SELECT * FROM szzRecord.folders /**where**/");
if (model.Period != null)
builder.Where("period = @period", new { model.Period });
var result = con.Query(selector.RawSql);
return result;
}
例如,正常 sql 查询的结果:SELECT * FROM szzRecord.folders WHERE period = 24
返回 251 行 - 这是正确的。
dapper查询的结果是1223,都是行。所以看起来该参数不存在。在期待 selector
时,我找到了 period
的参数。我在selector.parameters.templates[0]
中找到了Period = 24
。这个对吗? selector.parameters.parameters
为空。
您需要将 SqlBuilder
的参数传递到您的查询中。你有:
var result = con.Query(selector.RawSql);
将此更改为:
var result = con.Query(selector.RawSql, selector.Parameters);