将SqlParameter发送给Dapper

时间:2014-04-10 04:37:21

标签: c# dapper

我在我的项目中使用Dapper。我有一个SqlParameters列表,我想将它发送给Dapper。但是Dapper需要一个对象(名称,值)。如何将SqlParameter转换为对象。我知道这不起作用:

conn.Query<TModel>(sql, parameters.Select(p => new {p.ParameterName=p.Value}))

有什么建议吗?

3 个答案:

答案 0 :(得分:12)

偶然发现了其他东西 - 但可以提供一些可能在将来帮助其他人的见解。

您可以使用Dapper.DynamicParameters对象添加可以合法传递给Dapper Queries的项目,即(手动编码)

var args = new DynamicParameters(new {});
parameters.ForEach(p => args.Add(p.ParameterName, p.Value));
conn.Query<TModel>(sql, args );

HTH

答案 1 :(得分:1)

此外,您还可以分配输入参数,数据类型,

的方向。
var parameters = new DynamicParameters();
            parameters.Add(name: "@UserId", value: obj.DriverId, dbType: DbType.String, direction: ParameterDirection.Input);
            parameters.Add(name: "@Password", value: obj.DPassword, dbType: DbType.String, direction: ParameterDirection.Input);
            parameters.Add(name: "@IMEINo", value: obj.IMEINo, dbType: DbType.String, direction: ParameterDirection.Input);
            return DatabaseHub.Query<object>(storedProcedureName: @"[dbo].[sp_m_GetAppLoginCheckData]", parameters: parameters, dbName: AMSDB).FirstOrDefault();

答案 2 :(得分:0)

希望这会节省一些时间。 我喜欢Majedur的答案,可以对进/出参数进行更多类似sql的控制。

简单易学的一课是Dapper的.Query <>()和.QueryAsync <>()方法确实采用了一个对象,它将转换为sql参数-需要注意几点:

可以使用匿名类型

new { Id = 100, Name = "name" }

其他定义的类型仅在其属性具有getter和setter的情况下才起作用:

public class MyArg
{
    public long Id { get; set; }
    public string Name { get; set; }
}

即不:

public class MyArg
{
    public long Id;
    public string Name;
}