我需要所有Dapper大师的帮助。
我一个月前一直在学习使用Dapper,但在使用ODBC SP执行查询时出错。
代码最初是由某人(DapperExample)编写的,但没有使用ODBC,感谢作者我忘了你的名字。
CREATE PROCEDURE SP_GET_FIND_EMPLOYEES(@EmpID INT) 如 开始 设置NOCOUNT ON; SELECT * FROM tblEmployee WHERE EmpID = @EmpID
END GO
公共类EmployeeDashBoard: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]过程或函数&#39; SP_GET_FIND_EMPLOYEES&#39;期望参数&#39; @EmpID&#39;,这是未提供的。
先谢谢。
Masa Sih
答案 0 :(得分:0)
我自己解决了,我使用的是Sybase ODBC SP(God Job Sam),现在我可以避免使用该功能中的实体框架了。 这里的技巧:
已解决: 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;
}
答案 1 :(得分:0)
您对ODBC命名参数的实现不正确。您在语句中包含带有问号的命名参数,并创建没有问号的命名参数。 Dapper使用问号来解析语句以查找名称。
p.Add("EmpID", id.ToString());
Employee result = this._db.Query<Employee>("dbo.SP_GET_FIND_EMPLOYEES ?EmpID?", p, commandType: CommandType.StoredProcedure).Single();
有关详细信息,请参阅此答案:https://stackoverflow.com/a/26484944/6490042