Запрос Teradata с использованием Dapper C # - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь динамически запрашивать базу данных Teradata, используя Dapper, но у меня возникают некоторые проблемы.Вот код:

// model variable is the parameter passed in with search information
using (IDbConnection con = new TdConnection(connection.GetConnectionString()))
{
    var builder = new SqlBuilder();
    var selector = builder.AddTemplate($"SELECT * FROM Temp_Table /**where**/");

    if (model.Id != 0)
    {
        builder.Where("Id = ?", new { model.Id });
    }

    if (!string.IsNullOrEmpty(model.Employee_Id))
    {
        builder.Where("Employee_Id = ?", new { model.Employee_Id });
    }

    var data= con.Query<TableModel>(selector.RawSql, model).ToList();
    return data;
}

Я получаю ошибку:

[База данных Teradata] [3939] Несоответствие между количеством указанных параметров и числомнеобходимых параметров.

Я использовал очень похожий код для запроса DB2, который работал просто отлично;что мне нужно сделать по-другому с Teradata?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

удалось выяснить это.Изменена строка для получения данных:

var data= con.Query<TableModel>(selector.RawSql, selector.Parameters).ToList();

Не уверен, почему передача в модель работала нормально в моей версии DB2, но не в этой версии Teradata.

0 голосов
/ 10 октября 2018

На первый взгляд кажется, что он проваливается и не добавляет никаких условий «где».Попробуйте структурировать его так, чтобы, если он провалился, добавьте 1 = 1 или эквивалент Teradata, если это не сработает.

Я не знаком с классом SqlBuilder();но если у вас есть способ проверить, не добавлены ли какие-либо ограничения Where, добавьте универсальное ограничение.Или более грязный способ - сохранить ссылку bool и проверить в конце.

Обновить

Попробуйте передать параметры:

var data= con.Query<TableModel>(selector.RawSql, selector.Parameters).ToList();
...