简体   繁体   中英

Teradata Query Using Dapper C#

I am trying to dynamically query a Teradata database using Dapper but am having some issues. Here is the code:

// 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;
}

The error I am getting is:

[Teradata Database] [3939] There is a mismatch between the number of parameters specified and the number of parameters required.

I have used very similar code to query DB2 which worked just fine; what do I need to do differently with Teradata?

At first glance it appears to be falling through and not adding any "where" condition. Try to structure it in such a way that if it falls through then add 1=1 or a Teradata equivalent if that doesn't work.

I'm unfamiliar with the SqlBuilder() class; but if you have a way of seeing if there aren't any Where constraints added, then to add a generic one. Or, a dirtier way would be to keep a bool reference and check at the end.

Update

Try passing in the parameters:

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

Managed to figure it out. Changed the line for getting the data to:

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

Not sure why passing in the model worked just fine in my DB2 version but not this Teradata version.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM