在Dapper中执行带有参数的存储过程

 MichaelZhu 发布于 2023-01-29 08:09

我正在使用Dapper(感谢Sam,很棒的项目.)带有DAL的微型ORM,由于某种原因,我无法使用输入参数执行存储过程.

在示例服务中,我有以下代码:

public void GetSomething(int somethingId)
{
    IRepository repository = UnitOfWork.GetRepository();

    var param = new DynamicParameters();
    param.Add("@somethingId", dbType: DbType.Int32, value:somethingId, direction: ParameterDirection.Input);

    var result = repository.Exec(SomethingEnum.spMyStoredProcedure, param);

    ...

}

当触发执行存储过程时,抛出SqlException声明我需要提供'somethingId'

过程或函数'spMyStoredProcedure'需要参数'@somethingId',这是未提供的.

我的DAL类似于Pencroff的这个github项目.

我在这里错过了什么吗?

更新:我实际上是通过SomethingEnum传递commandType:

 public class SomethingEnum : EnumBase
 {
    public static readonly SomethingEnum spMyStoredProcedure = new SomethingEnum("spMyStoredProcedure", "[dbo].[spMyStoredProcedure]", CommandType.StoredProcedure);

    public SomethingEnum(string Name, string EnumValue, CommandType? cmdType): base(Name, EnumValue, cmdType)
    {
    }
}

Marc Gravell.. 31

你需要告诉它命令类型:确保commandType: CommandType.StoredProcedure在短小精悍的调用中有一个.否则,它只是执行text命令:

spMyStoredProcedure

(在环境上下文中有一些未使用的参数).这是合法的TSQL,并尝试在spMyStoredProcedure 不传递参数的情况下调用- 就像spMyStoredProcedure放入SSMS并按下一样f5.

此外,如果您的参数是固定的,我实际上建议只使用:

var param = new { somethingId };

甚至只是完全内联它:

var result = repository.Exec(SomethingEnum.spMyStoredProcedure,
    new { somethingId }, commandType: CommandType.StoredProcedure);

(注意:如果您的Exec方法只处理存储过程,您可以将commandType内部移动到方法 - 或者您可以将其设置为默认的可选参数CommandType.StoredProcedure)

1 个回答
  • 你需要告诉它命令类型:确保commandType: CommandType.StoredProcedure在短小精悍的调用中有一个.否则,它只是执行text命令:

    spMyStoredProcedure
    

    (在环境上下文中有一些未使用的参数).这是合法的TSQL,并尝试在spMyStoredProcedure 不传递参数的情况下调用- 就像spMyStoredProcedure放入SSMS并按下一样f5.

    此外,如果您的参数是固定的,我实际上建议只使用:

    var param = new { somethingId };
    

    甚至只是完全内联它:

    var result = repository.Exec<Something>(SomethingEnum.spMyStoredProcedure,
        new { somethingId }, commandType: CommandType.StoredProcedure);
    

    (注意:如果您的Exec<T>方法只处理存储过程,您可以将commandType内部移动到方法 - 或者您可以将其设置为默认的可选参数CommandType.StoredProcedure)

    2023-01-29 08:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有