zoukankan      html  css  js  c++  java
  • Dapper: How to get return value ( output value) by call stored procedure

    使用Dapper 执行存储过程插入一条数据,同时返回主键

    Dapper 的参数类型有以下四种 System.Data.ParameterDirection
        public enum ParameterDirection
        {
    
            Input = 1,
    
            Output = 2,
    
            InputOutput = 3,
    
            ReturnValue = 6
        }
    

    Method 1 Use ParameterDirection.ReturnValue

    ##### key:

    return @@IDENTITY
    p.Add("@ID", dbType: DbType.Int32, direction:ParameterDirection.ReturnValue);
    var id = p.Get("@tID");

    MyTabel:
    CREATE TABLE [dbo].[WorkLog](
    	[LogID] [bigint] IDENTITY(1,1) NOT NULL,
    	[TypeID] [int] NOT NULL,
    	[InsertDate] [datetime2](7) NOT NULL,
    	[Description] [nvarchar](max) NULL,
    	[UserName] [nvarchar](250) NULL,
    	[StatusId] [int] NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    
    Store Procedure:
    CREATE proc [dbo].[InsertLogAndReturnID]
       @TypeID INT ,
       @Description nvarchar(max),
       @UserName nvarchar(250)
       AS
      Begin
        declare @TestID INT
        
         INSERT INTO [dbo].[WorkLog]
               ( [TypeID]
               ,[InsertDate]
               ,[Description]
               ,[UserName])
         VALUES
               (
               @TypeID
               , GETDATE()
               , @Description
               ,@UserName )
        
    	return @@IDENTITY	
      END
    GO
    
    C# code:
    var spName = "[dbo].[InsertLogAndReturnID]";
    
     using (SqlConnection objConnection = new SqlConnection(Util.ConnectionString))
     {
        objConnection.Open();
        DynamicParameters p = new DynamicParameters();
    
        p.Add("@ID", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
        p.Add("@TypeID", 1);
        p.Add("@Description", "TEST1");
        p.Add("@UserName", "stone");
    
        var row = SqlMapper.Execute(objConnection, spName, p, commandType: CommandType.StoredProcedure);
         var id  = p.Get<Int32>("@ID");
    
          objConnection.Close();
       }
    

    Method 2 Use ParameterDirection.Output

    ##### Stored Procedure ``` CREATE proc [dbo].[InsertLogAndReturnID] @TypeID INT , @Description nvarchar(max), @UserName nvarchar(250), @ID INT OUTPUT AS Begin declare @TestID INT
     INSERT INTO [dbo].[WorkLog]
           ( [TypeID]
           ,[InsertDate]
           ,[Description]
           ,[UserName])
     VALUES
           (
           @TypeID
           , GETDATE()
           , @Description
           ,@UserName )
    
    SELECT @ID = @@IDENTITY	
    

    END
    GO

    ##### C# Code
    

    var spName = "[dbo].[InsertLogAndReturnID]";

    using (SqlConnection objConnection = new SqlConnection(Util.ConnectionString))
    {
    objConnection.Open();
    DynamicParameters p = new DynamicParameters();

    p.Add("@TestID", dbType: DbType.Int32, direction: ParameterDirection.Output);
    p.Add("@TypeID", 1);
    p.Add("@Description", "TEST1");
    p.Add("@UserName", "stone");
    
    var row = SqlMapper.Execute(objConnection, spName, p, commandType: CommandType.StoredProcedure);
     var id  = p.Get<Int32>("@TestID");
    
      objConnection.Close();
    

    }

  • 相关阅读:
    .VC中的Attach和Detach
    virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
    用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
    .OnNcHitTest
    线性规划与网络流24题索引
    线性规划与网络流24题 17运输问题
    网络流24题 21最长k可重区间集问题
    网络流16数字梯形问题
    网络流24题 20深海机器人问题
    网络流24题 19负载平衡问题
  • 原文地址:https://www.cnblogs.com/leestone/p/11562970.html
Copyright © 2011-2022 走看看