Dapper使用ODBC存储过程 输入参数总是提示@XXX was not supplied

Dapper using ODBC store procedure Input parm always promt @XXX was not supplied

我需要All Dapper大师的帮助

我从一个月前开始学习使用Dapper,但是在使用ODBC SP 执行查询时出现错误。

代码最初是某人(DapperExample)编写的,但没有使用ODBC,感谢作者我忘记了你的名字。

我的SP:

创建过程SP_GET_FIND_EMPLOYEES (@EmpID INT) 作为 开始 设置无计数; SELECT * 来自 tblEmployee,其中 EmpID = @EmpID

结束 去


我的代码

public class 员工仪表板:IEmployeeDashBoard {

    private IDbConnection _db;
    string connStr2 = WebConfigurationManager.ConnectionStrings["DapperExample"].ConnectionString;

    public EmployeeDashBoard()
    {

    }

    public Employee Find(int id)
    {

        //type b, by sp 
        using (IDbConnection connection = new OdbcConnection(connStr2))
        {

            var p = new DynamicParameters();

                p.Add("@EmpID", id);



            Employee result = this._db.Query<Employee>("dbo.SP_GET_FIND_EMPLOYEES", new { @EmpID = id }, commandType: CommandType.StoredProcedure).Single();
            return result;

        }



    }


}

错误:

错误 [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server] 过程或函数 'SP_GET_FIND_EMPLOYEES' 需要未提供的参数“@EmpID” .

提前致谢。

施玛莎

我自己解决了,我正在使用 Sybase ODBC SP,(God Job Sam),现在我可以在功能中避免 entity framework。 技巧在这里:

Solved: SP_GET_FIND_EMPLOYEES ?


        using (IDbConnection connection = new OdbcConnection(connStr2))
        {

            var p = new DynamicParameters();

            p.Add("?EmpID?", id.ToString()); 

            Employee result = this._db.Query<Employee>("dbo.SP_GET_FIND_EMPLOYEES ?", p, commandType: CommandType.StoredProcedure).Single();
            return result;
        }

您对 ODBC 命名参数的实现不正确。您在语句中用问号包围命名参数,并创建不带问号的命名参数。 Dapper 使用问号来解析语句以查找名称。

p.Add("EmpID", id.ToString());
Employee result = this._db.Query<Employee>("dbo.SP_GET_FIND_EMPLOYEES ?EmpID?", p, commandType: CommandType.StoredProcedure).Single();

有关详细信息,请参阅此答案: