Leere Liste oder Nullwert an Tabellenparameter einer gespeicherten Prozedur binden
Habe ich erstellt eine gespeicherte Prozedur, die eine Tabelle geschätzt, die parameter, die eine Tabelle mit einer einzigen Spalte vom Typ int. Die Idee ist, übergeben Sie einfach eine Liste von ids in der Shop-Verfahren und ermöglichen die sp mit den Daten arbeiten. Jedoch in dem Fall, wo es keine Daten zu übergeben, bin ich auf Probleme (die Dinge richtig funktionieren, wenn ich die Daten). Ich bin Umwandlung einer Liste in ein IEnumerable, und-Bindung, die zu der Tabelle geschätzten parameter für die sp. Ich habe versucht zu binden eine leere Liste, die zu dem Fehler geführt
System.ArgumentException: Es gibt keine Datensätze in der SqlDataRecord-enumeration. Senden Sie eine Tabellenwert-parameter mit keine Zeilen, verwenden Sie eine null-Referenz für den Wert statt.
Ich habe dann versucht, binden einen null-Wert (ich dachte, das war es, was die obige Meldung war immer an), aber das nur führte zu einer anderen Fehlermeldung
System.NotSupportedException: DBNull Wert für den parameter '@MainItemIdList " wird nicht unterstützt. Tabellenwert-Parameter nicht DBNull.
Erscheint es nicht, dass Sie erklären können der Tabelle geschätzten parameter als null in der sp-Erklärung. Was ist die richtige Methode für die Bindung eines leeren Liste am Tisch geschätzten parameter?
InformationsquelleAutor der Frage Brian Jones | 2010-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der trick ist: don ' T pass in die parameter überhaupt. Der Standardwert für einen Tabellenwert-parameter eine leere Tabelle.
Es ist eine Schande, dass die exception message ist also wenig hilfreich.
InformationsquelleAutor der Antwort Daniel Cassidy
War ich ein wenig verwirrt, was die 'nicht übergeben die parameter' - Anweisung bedeutet. Was am Ende arbeiten Sie für die Entity Framework ExecuteSqlCommandAsync() ist diese:
Dieser wird der parameter als 'default'.
InformationsquelleAutor der Antwort Noppey
Bekomme ich die Fehlermeldung bei der Weitergabe eines leeren
IEnumerable<int>
aber es funktioniert, wenn ich übergeben Sie einen leerenList<int>
statt.InformationsquelleAutor der Antwort jausel