【问题标题】:Dapper DynamicParameters returning errorDapper DynamicParameters 返回错误
【发布时间】:2016-08-12 14:57:52
【问题描述】:

我目前正在使用最新版本的 dapper,版本 1.50.0-beta9。我用于 Oracle 的提供程序是 Oracle.ManagedDataAccess,版本 12.1.2400。 使用 dapper 的动态参数时出现错误。我的代码类似于下面的例子:

public class PersonDAL : OracleBase {

    public PersonDAL() : base() {
    }

    public PersonDAL(string connectionString) : base(connectionString) {
    }

    public const string ParamPersonID = ":personid";
    public const string ParamClassID = ":classid";
    private const string getPersonByClassAndID = "SELECT PERSON_ID AS PersonID, PERSON_DESCRIPTION AS PersonDescription, CLASS_ID AS ClassID FROM TABLE_PERSON WHERE PERSON_ID = " + ParamPersonID + " AND CLASS_ID = " + ParamClassID;

    public SystemModel GetModelByPersonID_ClassID(int classID, int personid) {
        DynamicParameter = new DynamicParameters();
        DynamicParameter.Add(ParamClassID, classID);
        DynamicParameter.Add(ParamPersonID, personid);
        return Connection.QuerySingle<SystemModel>(getPersonByClassAndID, DynamicParameter);
    }
}

这将返回此错误:

参数绑定无效
参数名称:personidAND

【问题讨论】:

  • 上述解决方案现在有效

标签: c# oracle dapper


【解决方案1】:

您在 SQL 中缺少语法。你所拥有的是

WHERE Foo=:fooBar=:bar

您需要一个ANDOR 以及中间的一些空格。

顺便说一句,在这种情况下,您实际上并不需要 DynamicParameters。这里的“经典”简洁用法只是:

new { classID, personID } 

作为参数对象。

【讨论】:

  • 是的,刚刚看到我忘记在查询中添加 AND。不管怎样,当我在查询上有一个 AND 时,我得到:无效的参数绑定参数名称:personidAND.... 所以你说我必须尝试将返​​回更改为:return Connection.QuerySingle(getSystemBySystemCode,new {classID , 人 ID});
  • 好的,只是你的建议,我仍然遇到同样的问题 Invalid parameter binding Parameter name: personidAND
  • 好的,谢谢,下载dapper并调试
  • @BananaGuard 最后的问题是什么?因为到目前为止,我所看到的只是格式错误的 SQL...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多