2010-12-15 16 views
7

Mam problemy z konwersją smallinta w t-sql na liczbę całkowitą w C#.Jak przekonwertować smallint z t-sql na liczbę całkowitą wC#?

Czy ktoś może mi pomóc w rozwiązaniu tego problemu?

Aktualizacja # 1

co naprawdę staramy się robić to odzyskać dane z kolumny oznaczonej jako smallint w sqlserver 2005 ze datareader w mojej aplikacji. Przepraszam, wcześniej nie byłam wystarczająco oczywista.

+1

Jakie problemy masz? Czy możesz dać przykład? –

+0

Biorąc pod uwagę, że istnieje kilka różnych podejść do pobierania danych z SQL Server, dajesz nam bardzo mało do kontynuowania. – spender

Odpowiedz

9

Nie jestem do końca pewien, jakie problemy masz jako zakres liczb w smallint to podzbiór zakresu wartości całkowitych.

Standardowa konwersja w C# powinno działać:

int intFromSmallInt = Convert.ToInt16(smallint); 

jest błąd pochodzących z ORM?

+0

Próbowałem pobrać go z obiektu SqlDataReader. Tak właśnie zrobiłem. dr.GetInt16 (dr.GetOrdinal ("ColumnName")). Dzięki i tak. – Tebo

8

Istnieje również C# TypDanych "krótki", który jest System.Int16 (a.k.a. "smallint" w SQL Server).

Wolę używać "krótkiego" tylko dlatego, że myślę, że wygląda fajniej i nie ma innego powodu.

Również chciałbym użyć następujących wyciągnąć dane (jeśli jest pustych):

short? sVal = dr["ColName"] is System.DBNull ? null : (short?)(dr["ColName"]); 
+0

_ "Wolę używać" short "tylko dlatego, że myślę, że wygląda fajniej" _ uzasadnionym powodem jest: ponieważ jest to właściwy typ, gdy wybierzesz 'smallint'. Gdybyś użył 'int', pozwoliłbyś na numery, które są zbyt duże aby zostać wstawione do bazy danych. –

+1

Preferuję "krótki" typ danych nad strukturą "System.Int16". Int16 jest strukturą, która ma krótkie aliasy. Nic ci nie jest, używając jednego z nich. Nie miałem na myśli, że wolałbym krótką int - to oczywiście byłoby nie tak. – MikeTeeVee

-4
int? value = (int?)(row["ColumnName"] as short?); 
+0

Just minus? Czy możesz wyjaśnić, dlaczego? – isxaker

+0

, ponieważ odpowiedź jest niepoprawna. –

Powiązane problemy