2016-05-11 1 views
0

Je tente d'exécuter une procédure stockée avec des paramètres de table. Ces paramètres peuvent être null, à cause de laquelle mon code lance une exception de référence nulle. Existe-t-il un moyen de transmettre des paramètres de valeur table nullable? S'il vous plaît donnez votre avis.Exception de référence nulle pour le paramètre de valeur de table lors de l'exécution de la procédure stockée en C#

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; 
    } 

Dans le code ci-dessus, je reçois exception de référence null pour domainTableTypes parce que parfois il peut avoir une valeur et parfois pas. Cette question n'est pas en double car j'ai un problème avec le paramètre de valeur table. Je suis conscient de la façon de traiter les paramètres réguliers. Cette solution n'a pas fonctionné pour moi: (

+0

utilisation DBNull.Value, – Haris

+0

Pouvez-vous poster la trace complète de la pile 'domainTableTypes' étant nul ne devrait pas être un problème dans le code –

+0

@Stanely de your:.?. désolé pour des raisons de sécurité , Je ne peux pas fournir trace de la pile ici, mais si je donne une valeur, le code fonctionne, donc c'est le paramètre de type de table null qui cause le problème – Rash

Répondre

1

Autant que je me souvienne, vous ne pouvez pas passer NULL à un type de table.Vous devez passer une table vide.Je suis désolé à l'avance si cela est spécifique au système de base de données, mais peut-être que vous utilisez le même SGBD

if (criteria.Domains != null && criteria.Domains.Any()) 
{ 
    domainTableTypes = criteria.Domains.Select(d => new DomainTableType(d)); 
} 
else 
{ 
    domainTableTypes = Enumerable.Empty<DomainTableType>(); 
} 
+0

Ça a marché, .. merci! – Rash