SqlBuilder возвращает неверный результат - PullRequest
1 голос
/ 27 марта 2019

У меня есть запрос, используя 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 строку - это правильно.

Результат с более щадящим запросом - 1223, все строки.Так что, похоже, этот параметр не существует.Ожидая selector, я нахожу свой параметр для period.Я нашел Period = 24 в selector.parameters.templates[0].Это правильно?selector.parameters.parameters пусто.

1 Ответ

2 голосов
/ 27 марта 2019

Вам необходимо передать параметры SqlBuilder в ваш запрос.У вас есть:

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

Измените это на:

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