【发布时间】:2018-12-13 16:25:27
【问题描述】:
我刚开始学习 C# 中的 Dapper,但在一个事务中执行包含两个或多个 SQL 语句的存储过程时遇到困难。
如何获得存储过程的输出参数 使用 Dapper 在 C# 中同时包含 Insert 和 Select 语句?
这是我的存储过程:
ALTER PROCEDURE [dbo].[AddToFileDetailsAndGetPrimaryKey]
-- 1. declare input variables
@file_name NVARCHAR(100) = NULL,
-- 2. declare output variable
@file_details_pk UNIQUEIDENTIFIER OUTPUT
AS
-- 3. instantiate holder table
DECLARE @pk_holder TABLE
(
retrieved_pk UNIQUEIDENTIFIER
)
-- 4. insert into FileDetails
INSERT INTO dbo.FileDetails
(
file_name
)
OUTPUT INSERTED.file_details_pk INTO @pk_holder
VALUES
(
@file_name
);
-- 5. set FileDetails primary key to OUTPUT variable
SELECT @file_details_pk = retrieved_pk
FROM @pk_holder
这是我用来执行存储过程的代码:
using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Configuration.GetConnectionString("TESTDB")))
{
List<FileDetails> fileList = new List<FileDetails>();
fileList.Add(new FileDetails { file_name = fileName});
Guid outputPrimaryKey;
connection.Execute("dbo.AddToFileDetailsAndGetPrimaryKey @file_name, @file_details_pk", fileList, outputPrimaryKey);
}
这是正确的方法吗?我应该使用 connection.Execute 还是 连接。查询?我也收到“无法从 System.Guid 到我的 outputPrimaryKey 中的 System.Data.IDbTransaction"
【问题讨论】:
-
@granadaCoder 是的,这正是我想要做的。我想我可以使用 Execute,因为我的存储过程的 Insert 语句更容易。但是获得输出是我不确定该怎么做的事情。
标签: c# sql sql-server dapper