.NET i takie tam

Oszczędność nie popłaca

leave a comment »

Jestem świeżo po sesji z debuggerem. Ostatnio aktualizowałem bazę danych SQL CE z wersji 3.1 do 3.5, w wyniku czego pojawiły się dziwne problemy z wstawianiem danych. Otóż raz na jakiś czas dane binarne dodawane do bazy były uszkodzone.

Gdzie tkwił problem? Ano w oszczędności znaków (czytaj: lenistwie). Przykładowo definiując parametr dla obiektu SqlCeCommand, w sposób:

cmd.Parameters.Add(new SqlCeParameter(“FileData”, question.FileData));

Nie określamy w sposób jawny jego typu. Silnik SQL CE musi niejako sam go sobie zgadnąć i akurat w tym przypadku robił to błędnie. Zamiast zdefiniowanego w tabeli typu Image stosował varbinary(8000). Dlatego też gdy rozmiar danych będzie mniejszy lub równy 8000 bajtów wszystko działa bez zarzutu. Jednak jeśli rozmiar przekroczy magiczną wartość 8000, dane zostaną, że tak się wyrażę ‚przycięte’ i w ten sam sposób uszkodzone. Rozwiązaniem oczywiście jest jawne zdefiniowanie parametru:

SqlCeParameter fileDataParameter = new SqlCeParamete(“FileData”, SqlDbType.Image);
cmd.Parameters.Add(fileDataParameter);
fileDataParameter.Value = question.FileData;

No to zaoszczędziłem sobie dwie linie kodu.

Written by sakowicz

Maj 14, 2008 @ 1:59 pm

Napisane w Misc

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: