SqlBuilder返回错误结果

时间:2019-03-27 12:53:13

标签: c# postgresql dapper npgsql sqlbuilder

我有一个使用NpgsqlPostgres的查询。为了构建查询,我使用了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的参数。我在Period = 24中找到了selector.parameters.templates[0]。它是否正确? selector.parameters.parameters为空。

1 个答案:

答案 0 :(得分:2)

您需要将SqlBuilder的参数传递到查询中。你有:

var result = con.Query(selector.RawSql);

将此更改为:

var result = con.Query(selector.RawSql, selector.Parameters);