[英]How can I use Dapper's QueryMultiple with a stored procedure, but with a different parameter value each time?
[英]How do I use Dapper to insert a list<myobject> as parameter to a stored procedure
我有一個包含 10 列的 SQL Server 表:
CREATE TABLE [bank].[CommonPostingsFromBankFiles]
(
[Id] [INT] IDENTITY(1,1) NOT NULL,
[BankRegistrationNumber] [INT] NOT NULL,
[BankAccountNumber] [BIGINT] NOT NULL,
[BankName] [NVARCHAR](50) NULL,
[BankAccount] [NVARCHAR](50) NULL,
[PostingAmount] [DECIMAL](18, 2) NOT NULL,
[PostingDate] [DATE] NOT NULL,
[Primo] [CHAR](1) NULL,
[PostingText] [NVARCHAR](100) NULL,
[HideThisRecord] [BIT] NULL,
CONSTRAINT [PK_CommonPostingsFromBankFiles]
PRIMARY KEY CLUSTERED ([BankRegistrationNumber] ASC,
[BankAccountNumber] ASC,
[PostingAmount] ASC,
[PostingDate] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
)
以及一個帶有 7 個參數的存儲過程:
ALTER PROCEDURE [bank].[spInsertCommonPostings]
(@BankRegistrationNumber INT,
@BankAccountNumber BIGINT,
@BankName NVARCHAR(50),
@PostingAmount DECIMAL(18, 2),
@PostingDate DATE,
@Primo CHAR(1),
@PostingText NVARCHAR(100))
AS
BEGIN
IF NOT EXISTS (SELECT *
FROM bank.CommonPostingsFromBankFiles
WHERE BankRegistrationNumber = @BankRegistrationNumber
AND BankAccountNumber = @BankAccountNumber
AND BankName = @BankName
AND PostingAmount = @PostingAmount
AND PostingDate = @PostingDate)
INSERT INTO bank.CommonPostingsFromBankFiles (BankRegistrationNumber, BankAccountNumber,
BankName, PostingAmount,
PostingDate, Primo, PostingText)
VALUES (@BankRegistrationNumber, @BankAccountNumber,
@BankName, @PostingAmount,
@PostingDate, @Primo, @PostingText);
END;
我想要的是使用 Dapper 使用存儲過程將List<Postings>
寫入表。
我已經搜索並搜索過,但沒有找到對我有幫助的例子。
如果我做一個
connection.Execute(sql: "spMyStoredProc", MyList, commandType: CommandType.StoredProcedure);
我收到一個錯誤
過程或函數 spMyStoredProc 指定的參數過多
如果我用存儲過程中的 sql 替換存儲過程的名稱並將 CommandType 設置為 Text 它會按預期工作。
任何人都可以向我發布一個示例,展示如何使用我的存儲過程插入我的列表。
謝謝,史蒂芬
簡單地說,假設您的 c# 對象中的屬性名稱與存儲過程中的參數名稱相同,您可以:
MyList.ForEach(x => connection.Execute(sql: "spMyStoredProc", x, commandType: CommandType.StoredProcedure));
如果 param/props 沒有對齊,那么提供一個匿名類型可能是最簡單的,該類型填充了來自 x 的值來覆蓋它們
MyList.ForEach(x => connection.Execute(
sql: "spMyStoredProc",
new { BankRegistrationNumber = x.BankRN, ... },
commandType: CommandType.StoredProcedure
));
對於 10 個對象的列表,它將調用 proc 10 次; 這不是最快的方法,但我認為您沒有說明任何關於性能等的特定目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.