【问题标题】:C# Web API using Dapper to insert data using a stored procedure - unable to get inserted record IdC# Web API 使用 Dapper 使用存储过程插入数据 - 无法获取插入的记录 ID
【发布时间】:2021-04-08 07:39:34
【问题描述】:

我是 Dapper 的新手 - 请帮助我。插入成功后如何获取插入的记录值?

存储过程:

ALTER PROCEDURE Sp_InsertTestData
    @Name varchar(50),
    @gender int,
    @refres int OUTPUT
AS
BEGIN
    INSERT INTO Test_Master (Name, Gender) 
    VALUES (@Name, @gender);

    SELECT @refres = SCOPE_IDENTITY()
    SELECT @refres as M_SID
END

当我像这样在 SQL 中执行这个存储过程时:

DECLARE @refres INT
EXEC Sp_InsertTestData 'test12',1,@refres

我得到一个显示最后插入行的值的输出。

但是当这个存储过程从 C# 代码中执行时,每次我得到的值都是 1:

using (SqlConnection con = new SqlConnection(_configuration.GetConnectionString("DatabaseConnection")))
{
    con.Open();

    SqlTransaction sqltrans = con.BeginTransaction();

    var param = new DynamicParameters();
    param.Add("@Name", Bindtestmaster.Name);
    param.Add("@gender", Bindtestmaster.Gender);
    param.Add("@refres");

    res = con.Execute("Sp_InsertTestData", param, sqltrans, 0, CommandType.StoredProcedure);
}

【问题讨论】:

标签: c# dapper


【解决方案1】:

那是因为你得到了存储过程调用的结果,它告诉你插入的行数(即 1)。

您想读取输出参数@refres(并将其作为输出参数添加到您的DynamicParameters

/* ... */
param.Add("@refres", dbType: DbType.Int32, direction: ParameterDirection.Output);
con.Execute("Sp_InsertTestData", param, sqltrans,0,CommandType.StoredProcedure);
var yourId = param.Get<int>("@refres");

顺便说一句,在您的存储过程上,而不是:

select @refres=SCOPE_IDENTITY()

您可能更喜欢这个:

SET @refres = SCOPE_IDENTITY() AS INT

我不确定最后一个SELECT 是干什么用的

或者直接输出插入的ID(使用INSERT上的OUTPUTSQL子句)然后就可以读取结果了,完全没有输出参数。

【讨论】:

    【解决方案2】:

    由于您的存储过程也选择输出:

    select @refres as M_SID
    

    一种更简单的方法可能是:

    var id = con.ExecuteScalar<int>("Sp_InsertTestData", new {
        Name = Bindtestmaster.Name,
        gender = Bindtestmaster.Gender
    }, sqltrans, 0, CommandType.StoredProcedure);
    

    忘记DynamicParameters 等。您可以考虑在SQL 中使用OUTPUT 子句来简化它:

    ALTER PROCEDURE Sp_InsertTestData
        @Name varchar(50), @gender int
    AS
    BEGIN
        INSERT INTO Test_Master(Name, Gender)
        OUTPUT INSERTED.Id -- whatever the column is here
        VALUES (@Name, @gender);
    END
    

    【讨论】:

      猜你喜欢
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      相关资源
      最近更新 更多