簡體   English   中英

C# Web API 使用 Dapper 使用存儲過程插入數據 - 無法獲得插入的記錄 ID

[英]C# Web API using Dapper to insert data using a stored procedure - unable to get inserted record Id

我是 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

我得到一個 output 顯示最后插入的行的值。

但是當這個存儲過程從 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);
}

那是因為您獲得了存儲過程調用的結果,它告訴您插入的行數(即 1)。

您想閱讀 output 參數@refres (並將其作為 output 參數添加到您的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是干什么用的

Or directly output the inserted ID (using the OUTPUT SQL clause on the INSERT ) and then you could read the result, and not have an output parameter at all.

由於您的存儲過程還選擇了 output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM