簡體   English   中英

PetaPoco,將列表傳遞到存儲過程

[英]PetaPoco, Passing a list to a stored procedure

我正在嘗試使用petapoco將對象列表傳遞給存儲過程,該存儲過程返回一條消息,指出沒有托管的本機類型可將我的對象類型映射到該對象,並且我不完全理解為什么以及如何更正它。

我正在將Azure用於已創建表值參數的數據庫

 CREATE TYPE TransactionModel AS TABLE (
Id int,
UserName nvarchar(128),
RecordId int,
OrderId int,
Usd decimal(18,2),
Btc decimal(18,8),
BtcUsd decimal(18,2),
Fee decimal(18,2),
Type int,
DateTime datetime,
Updated datetime
)

我有一個與“交易”匹配的表

我的存儲

ALTER PROCEDURE sp_SaveTransactions
    -- Add the parameters for the stored procedure here
    @Transactions TransactionModel READONLY,
    @UserName nvarchar(128)
AS
BEGIN
    SET NOCOUNT ON;

    BEGIN
    INSERT INTO Transactions(UserName, RecordId, OrderId, Usd, Btc, BtcUsd, Fee, Type, DateTime, Updated)

    SELECT  UserName, RecordId, OrderId, Usd, Btc, BtcUsd, Fee, Type, DateTime, Updated
    FROM @Transactions
    END
END
GO

最后是我的C#方法

public static void SpSave<T>(T obj, string userName)
        {
            try
            {
                var ctx = new PetaPoco.Database("MyDatabase");

                if (obj.GetType().IsGenericType && obj is IEnumerable)
                {
                    var list = (IList)obj;
                    var l = ctx.Query<List<TransactionModel>>(";EXEC sp_SaveTransactions @0", list, userName);
                }
            }
            catch (Exception ex)
            {

            }
        }

MSDN中SQL Server的表變量支持的類型是數據表,DbDataReader或SqlDataRecord。 https://msdn.microsoft.com/zh-CN/library/bb675163%28v=vs.110%29.aspx

您應該能夠簡單地在將PetaPoco與這些數據類型之一結合使用時傳遞SqlParameter。

var param = new SqlParameter();
param.DbType = SqlDbType.Structured;
param.ParameterName = "@Transaction";
param.SqlValue = table; // Datatable or one of the acceptable SqlClient types above

ctx.Query<List<TransactionModel>>(";exec sp_SaveTransactions  @0", param);

暫無
暫無

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

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