Ich habe einige Textfelder auf meiner Seite, die leer sein kann, weil sie optional sind, und ich habe diesen DAL CodePassing DBNull.Value und leeren Textbox Wert Datenbank
parameters.Add(new SqlParameter("@FirstName", FirstName));
parameters.Add(new SqlParameter("@LastName", LastName));
parameters.Add(new SqlParameter("@DisplayName", DisplayName));
parameters.Add(new SqlParameter("@BirthDate", BirthDate));
parameters.Add(new SqlParameter("@Gender", Gender));
Jedes dieser Felder leer ist. Das Problem ist, wenn sie leer sind ich Procedure XXX requires @FirstName which was not supplied
erhalten
Dann änderte ich meinen Code zu
parameters.Add(new SqlParameter("@FirstName", String.IsNullOrEmpty(FirstName) ? DBNull.Value : (object)FirstName));
parameters.Add(new SqlParameter("@LastName", String.IsNullOrEmpty(LastName) ? DBNull.Value : (object) LastName));
parameters.Add(new SqlParameter("@DisplayName", String.IsNullOrEmpty(DisplayName) ? DBNull.Value : (object) DisplayName));
parameters.Add(new SqlParameter("@BirthDate", BirthDate.HasValue ? (object)BirthDate.Value : DBNull.Value));
parameters.Add(new SqlParameter("@Gender", String.IsNullOrEmpty(Gender) ? DBNull.Value : (object) Gender));
Aber das sieht mir unordentlich besonders das Casting zu object
weil ternärer Aussage sowohl Wert erfordert die gleiche Art zu sein.
Warum wird eine leere Zeichenfolge oder Null-Zeichenfolge nicht in der Datenbank NULL
behandelt? Wenn ich das in DBNull.Value
konvertieren muss, gibt es einen saubereren Weg? Speichern Sie den Wert als leere Zeichenfolge in der Datenbank könnte geholfen haben, aber Abfrage für NULL
in der Datenbank wird auch unordentlich
Bitte geben Sie Ihren Rat über gängige Praktiken oder etwas in der Nähe.
Ich habe keinen Zugriff auf das Befehlsobjekt, weil ich es abstrahiert weg in eine Basisklasse, so dass ich es mit mehreren Datenbank verwenden kann [Vermeidung von Abhängigkeit von einer bestimmten Datenbank]. Ich mag den Ansatz der Erweiterungsmethode. Vielen Dank. – codingbiz
Ich denke, etwas stimmt nicht mit 'DbNullIfNull'. Ich konnte die Logik dort nicht verstehen, also tippte ich es in mein .NET 4.0 Projekt, und es ist zweifellos falsch! Meine Vermutung ist, dass du 'return (obj! = Null) codierst? obj: DBNull.Value; 'anstelle von' return obj? = null? obj: DBNull.Value; 'Nur ein FYI. – jp2code
@ jp2code: Sicher, es war nur ein Tippfehler. Vielen Dank! Fest. – abatishchev