执行不返回结果的存储过程时抛出错误

时间:2013-01-18 19:24:38

标签: c# stored-procedures dapper

我目前正在其中一个项目上使用dapper,我们一直在执行存储过程。在前几个方法中,当我们执行的存储过程返回行时,一切正常。

现在,当我尝试从找到时返回信息的存储过程中获取数据时,我遇到了一个问题。这是一个非常常见的用例(例如,在应用程序上记录用户)。当调用Query方法并且sproc没有返回任何行时,dapper会抛出ArgumentException并显示以下消息:

“当使用多映射API时,如果您有除Id参数名称以外的密钥,请确保设置splitOn参数:splitOn”

我正在使用的代码是:

using (var conn = new SqlConnection(connString))
{
    conn.Open();

    return conn.Query<Customer>(
            sql: "prc_GetCustomer",
            param: new { Parameter = p },
            commandType: CommandType.StoredProcedure).FirstOrDefault();
}

我知道当程序预期不返回任何行时应该使用Execute方法,但实际上并非我的情况。此外,dapper异常具有误导性,因为我没有使用多映射。

有什么想法吗? 谢谢!

1 个答案:

答案 0 :(得分:4)

如果查询未返回任何结果网格,则应使用“执行”,而不是“查询”。