Mam kilka otaczaniem na mojej stronie, która może być pusty, ponieważ są opcjonalne i Mam ten kod DALPrzechodząc DBNull.Value i pustą wartość pola tekstowego do bazy
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));
Każde z tych pól może być puste. Problem jest wtedy, gdy są one puste otrzymam Procedure XXX requires @FirstName which was not supplied
Potem zmieniłem kod do
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));
Ale to wygląda plączą mi się zwłaszcza odlewania do object
ponieważ trójargumentowy stwierdzenie wymaga zarówno wartość być tego samego typu.
Dlaczego w bazie danych nie jest traktowany pusty ciąg znaków lub łańcuch o wartości pustej? NULL
Jeśli muszę przekonwertować to na DBNull.Value
jest czyściejszy sposób? Zapisanie wartości jako pustego ciągu w bazie danych mogłoby pomóc, ale zapytanie o numer NULL
w bazie danych również stanie się kłopotliwe.
Proszę podać porady dotyczące powszechnych praktyk lub czegoś w tym rodzaju.
Nie mam dostępu do obiektu polecenia, ponieważ pobrałem go do klasy Base, dzięki czemu mogę go używać z kilkoma bazami danych [unikając zależności od konkretnej bazy danych]. Podoba mi się podejście metod rozszerzenia. Dzięki. – codingbiz
Myślę, że coś jest nie tak z 'DbNullIfNull'. Nie mogłem zrozumieć tamtej logiki, więc wpisałem ją do mojego projektu .NET 4.0 i na pewno jest źle! Zgaduję, że miałeś napisać 'return (obj! = Null)? obj: DBNull.Value; 'zamiast' return obj? = null? obj: DBNull.Value; 'Po prostu FYI. – jp2code
@ jp2code: Oczywiście, to był tylko literówka. Dzięki! Naprawiony. – abatishchev