【问题标题】:Dapper parameters not working?Dapper 参数不起作用?
【发布时间】:2014-09-12 17:13:42
【问题描述】:

Dapper 1.34(在较早的 Dapper 版本上,如 1.1x 这工作正常)。

db.Query(@"Select [whatever] from @TableName Where [PREFIX]='@Prefix' order by [something] desc", 新 { 表名 = 表名,前缀 = 前缀 })

错误:System.Data.SqlClient.SqlException (0x80131904):必须声明表变量“@TableName”。

我在尝试定义 DynamicParameters 并传递它们时遇到同样的错误。

======= 我目前正在做字符串替换 {%1} .. 但这似乎不可接受...

我可以获取一个示例,同时查看 dapper 的测试类我看不到它正在运行,也许我的项目设置有问题?

【问题讨论】:

    标签: dapper


    【解决方案1】:

    不,由于 SQL 的工作方式,它从来没有正常工作过:

    • 表名不能参数化,dapper 从来没有提供过这个;如果您将DataTable 作为表值参数传递,可能 可以工作,但是 - dapper 确实 支持 - 但我不认为这是你的在后面
    • '@Prefix' 是字符串文字;你只是说@Prefix(没有单引号)

    【讨论】:

    • 其实其余的都没有关系,我只关注表名参数,以为它只是一个参数......我写的第一个查询必须将名称传递给它。在尝试以 20 种不同的方式传递参数后,我放弃了认为这是我以后会遇到的错误。我从来没有想到我正在传递一个表名......
    • Marc,我如何获得没有列名的 a 值。我这样做: (IDictionary)ret.First()).Values.ToList()[0] 有没有更好的方法? PS 我在上面返回 1 列和 1 行,但可能会有更多的行和列。如何将其迭代为表格或其他内容。
    • @EthernetIP 我无法解析那个问题;你能改写吗?我几乎可以肯定地回答它,但首先我需要理解它......
    • @EthernetIP 一列一行;有一个执行标量方法;对于一列多行:只需将其作为列查询 - Query<int>(...) 或类似的。除此之外:根据您的示例,Query()Query<dynamic>Query<DapperRow> 都返回实现字典的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多