当通过C#代码传递到存储过程时,TableTypeParameter始终为null
我编写了一个WebAPI方法,使用存储过程从数据库中获取事务历史记录。输入包括一个表类型参数,该参数从当通过C#代码传递到存储过程时,TableTypeParameter始终为null,c#,sql-server,C#,Sql Server,我编写了一个WebAPI方法,使用存储过程从数据库中获取事务历史记录。输入包括一个表类型参数,该参数从IEnumerable transactionCategories获取输入 public IEnumerable<ITransactionItem> Get(long loanId, DateTime? fromDate, DateTime? toDate, IEnumerable<string> transactionCategories) { IList<
IEnumerable transactionCategories
获取输入
public IEnumerable<ITransactionItem> Get(long loanId, DateTime? fromDate, DateTime? toDate, IEnumerable<string> transactionCategories)
{
IList<ITransactionItem> items;
try
{
var transCategories = transactionCategories.Select(t => new TransCategoryTableType(t));
using (var connector = GetConnector(ConnectionNames.UDSConnection))
{
items = (IList<ITransactionItem>)connector.StoredProcedure("spname")
.Parameter("@LoanId", loanId)
.Parameter("@FromDate", fromDate)
.Parameter("@ToDate", toDate)
.TableValuedParameter("@TransactionCategories", transCategories)
.As<ILedgerTransactionItem>()
.WithMapper(_mappingStrategy)
.GetRows();
}
}
catch (Exception e)
{
throw;
}
return items;
}
我需要帮助来解决这个问题。
存储的proc初始部分如下所示:
ALTER PROCEDURE [Core].[uspLedgerTransactionHistory]
(
@LoanId BIGINT,
@FromDate DATETIME = NULL,
@ToDate DATETIME = NULL,
@TransactionCategories [Reference].[TransCategories] READONLY
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
CREATE TABLE #Temp(TransCodeId INT)
INSERT INTO #Temp
Select tc.transactioncodeid FROM Reference.tTransactionCodes tc
JOIN Reference.tTransCodeCategories tcc
ON tc.TransactionCodeCategoryId=tcc.TransCodeCategoryId
WHERE tcc.Description IN (SELECT t.Description FROM @TransactionCategories t)
您的存储过程(至少是带有参数定义的头)是什么样子的??请看这里:。可能您的问题是不应该使用IEnumerable。您需要传入
IEnumerable
。谢谢您的回复。实际的问题是,我在表类型中传递的数据值来自swagger,如下所示:['Tax','Interest']。但我应该这样传递数据:税收利息。上面的代码运行良好。
ALTER PROCEDURE [Core].[uspLedgerTransactionHistory]
(
@LoanId BIGINT,
@FromDate DATETIME = NULL,
@ToDate DATETIME = NULL,
@TransactionCategories [Reference].[TransCategories] READONLY
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
CREATE TABLE #Temp(TransCodeId INT)
INSERT INTO #Temp
Select tc.transactioncodeid FROM Reference.tTransactionCodes tc
JOIN Reference.tTransCodeCategories tcc
ON tc.TransactionCodeCategoryId=tcc.TransCodeCategoryId
WHERE tcc.Description IN (SELECT t.Description FROM @TransactionCategories t)