在 C# 中执行存储过程时 Table 值参数的空引用异常
Null Reference Exception for Table Value Parameter while executing the stored procedure in C#
我正在尝试使用 table 值参数执行存储过程。这些参数可以为空,因此我的代码抛出空引用异常。有没有一种方法可以传递可为空的 table 值参数。请指教
public IEnumerable<ReportFilter> GetReportFilter(ReportInputDefinition criteria, Guid tenantId)
{
IEnumerable<ReportFilter> ReportFilterData;
IEnumerable<DomainTableType> domainTableTypes=null;
if (criteria.Domains != null && criteria.Domains.Any())
{
domainTableTypes = criteria.Domains.Select(d => new DomainTableType(d));
}
using (var connector = GetConnector(ConnectionNames.DefaultConnection))
{
reportFilterData = connector.StoredProcedure("SpName")
.TableValuedParameter("@TableValuedParameter1", domainTableTypes)
.Parameter("@TenantID", tenantId)
.As<ReportFilter>()
.GetRows();
}
return reportFilterData;
}
在上面的代码中,我得到了 domainTableTypes 的空引用异常,因为有时它可以有价值,有时却没有。这个问题不重复,因为我对 table 值参数有疑问。我知道如何处理常规参数。该解决方案对我不起作用:(
据我所知,不能将 NULL 传递给 table 类型。您必须传递一个空 table。如果这是特定于数据库系统的,我提前道歉,但也许您使用的是相同的 DBMS。
if (criteria.Domains != null && criteria.Domains.Any())
{
domainTableTypes = criteria.Domains.Select(d => new DomainTableType(d));
}
else
{
domainTableTypes = Enumerable.Empty<DomainTableType>();
}
我正在尝试使用 table 值参数执行存储过程。这些参数可以为空,因此我的代码抛出空引用异常。有没有一种方法可以传递可为空的 table 值参数。请指教
public IEnumerable<ReportFilter> GetReportFilter(ReportInputDefinition criteria, Guid tenantId)
{
IEnumerable<ReportFilter> ReportFilterData;
IEnumerable<DomainTableType> domainTableTypes=null;
if (criteria.Domains != null && criteria.Domains.Any())
{
domainTableTypes = criteria.Domains.Select(d => new DomainTableType(d));
}
using (var connector = GetConnector(ConnectionNames.DefaultConnection))
{
reportFilterData = connector.StoredProcedure("SpName")
.TableValuedParameter("@TableValuedParameter1", domainTableTypes)
.Parameter("@TenantID", tenantId)
.As<ReportFilter>()
.GetRows();
}
return reportFilterData;
}
在上面的代码中,我得到了 domainTableTypes 的空引用异常,因为有时它可以有价值,有时却没有。这个问题不重复,因为我对 table 值参数有疑问。我知道如何处理常规参数。该解决方案对我不起作用:(
据我所知,不能将 NULL 传递给 table 类型。您必须传递一个空 table。如果这是特定于数据库系统的,我提前道歉,但也许您使用的是相同的 DBMS。
if (criteria.Domains != null && criteria.Domains.Any())
{
domainTableTypes = criteria.Domains.Select(d => new DomainTableType(d));
}
else
{
domainTableTypes = Enumerable.Empty<DomainTableType>();
}