c# - 在 c# 代码中使用 dapper 将输出参数传递给存储过程

标签 c# sql sql-server stored-procedures dapper

我有一个这种格式的存储过程

CREATE PROCEDURE SP_MYTESTpROC
    @VAR1 VARCHAR(10),
    @VAR2 VARCHAR(20),
    @BASEID INT ,
    @NEWID INT OUTPUT
As Begin
   INSERT INTO TABLE_NAME(username, firstname)
      select @VAR1, @VAR2 
      WHERE ID = @BASEID

   SET @NEWID = SCOPE_IDENTITY() AS INT
END

我正在使用 dapper 从 C# 代码调用此存储过程。我的问题是:如何在使用 dapper 时将输出参数传递给存储过程?

最佳答案

只需搜索 Test.cs文件你可以找到这个例子

    public void TestProcSupport()
    {
        var p = new DynamicParameters();
        p.Add("a", 11);
        p.Add("b", dbType: DbType.Int32, direction: ParameterDirection.Output);
        p.Add("c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
        connection.Execute(@"create proc #TestProc 
                         @a int,
                             @b int output
                             as 
                             begin
                                 set @b = 999
                                 select 1111
                                 return @a
                             end");
        connection.Query<int>("#TestProc", p, commandType: CommandType.StoredProcedure).First().IsEqualTo(1111);
        p.Get<int>("c").IsEqualTo(11);
        p.Get<int>("b").IsEqualTo(999);
    }

所以,我想你的 C# 代码可以写成

    public void InsertData()
    {
        var p = new DynamicParameters();
        p.Add("VAR1", "John");
        p.Add("VAR2", "McEnroe");
        p.Add("BASEID", 1);
        p.Add("NEWID", dbType: DbType.Int32, direction: ParameterDirection.Output);
        connection.Query<int>("SP_MYTESTpROC", p, commandType: CommandType.StoredProcedure);
        int newID =  p.Get<int>("NEWID");
    }

作为旁注,不要使用 SP 作为存储过程的前缀。它是为系统定义的过程保留的,如果 Microsoft 决定使用相同的名称,您可能会遇到麻烦。尽管不太可能这是一种不好的做法,为什么要冒险?

关于c# - 在 c# 代码中使用 dapper 将输出参数传递给存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22353881/

相关文章:

MySQL 嵌套 SELECT

c# - 以下数据结构 : Dictionary<string, Dictionary<string, string>> 有什么更好的替代方案

c# - 无法加载文件或程序集 'System.ServiceModel.Web, Version=4.0.0.0'

php - MySQL根据2个id查找一个ID

mysql - 如何使用具有多个连接的聚合函数?

SQL Server DELETE 错误 - 子查询返回超过 1 个值

sql-server - Sql Server - 修复错误错误 : 18456, 严重性 : 14, 状态:11

mysql - 加入两个查询表

c# - 使用嵌入式 DLL?

c# - Tryparse 对我不起作用,ParseExact 可以,但是当包含额外空间时它会失败