【问题标题】:SqlBuilder returning wrong resultSqlBuilder 返回错误的结果
【发布时间】:2019-03-27 12:53:13
【问题描述】:

我有一个使用 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 的参数。我在selector.parameters.templates[0] 中找到了Period = 24。这个对吗? selector.parameters.parameters 为空。

【问题讨论】:

    标签: c# postgresql dapper npgsql sqlbuilder


    【解决方案1】:

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

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

    将其更改为:

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

    【讨论】:

      猜你喜欢
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2020-04-28
      相关资源
      最近更新 更多