2010-06-15 70 views
9

我正在讀取SQL Server表中的一行。其中一列是tinyint類型。C中的整數字節#

我想將值變成int或int32變量。

rdr.GetByte(j) 
(byte) rdr.GetValue(j) 

...似乎是檢索值的唯一方法。但是,我如何將結果變成int變量?

回答

17

int value = rdr.GetByte(j);

顯式的轉換是不需要的,因爲一個byteint是擴大轉換(無數據丟失的可能性)。

+1

附:這是一個隱含的''字節'''int' – abatishchev 2010-06-15 15:54:01

+3

我應該更具體。這是我已經嘗試過的。我收到「指定的演員表無效」。例外。我也試過: int value =(int)rdr.GetByte(j) and int value = Convert.ToInt(rdrGetByte(j)) – jtb 2010-06-15 16:08:38

+1

@jtb:在我看來,你沒有得到帶索引j的tinyint列。什麼是異常堆棧跟蹤?錯誤必須發生在'GetByte'裏面。 – 2010-06-15 16:27:39

1

鑄造byte到int應該只是罰款:

int myInt = (int) rdr.GetByte(j); 

由於C# supports implicit conversions from byte to int,則可以選擇只是這樣做:

int myInt = rdr.GetByte(j); 

你選擇哪一個是偏好的問題(不管你想要記錄演員是否正在發生的事實)。請注意,您將需要顯式轉換,如果你想使用type inference,否則敏將錯誤類型:

var myInt = (int) rdr.GetByte(j); 
10

查看文檔BitConverter.ToInt32(包含更多的例子):

byte[] bytes = { 0, 0, 0, 25 }; 

// If the system architecture is little-endian (that is, little end first), 
// reverse the byte array. 
if (BitConverter.IsLittleEndian) 
    Array.Reverse(bytes); 

int i = BitConverter.ToInt32(bytes, 0); 
Console.WriteLine("int: {0}", i); 
// Output: int: 25 
+1

問題是如何將單個'byte'轉換爲'int'。 'BitConverter'處理'byte'數組,而不是單個'byte's。 – 2010-06-15 15:55:44

+1

它仍然幫助我 – 2011-12-10 19:02:12

4

分配一個byteint作品:

int myInt = myByte; 

但是,也許你在裏面有一個例外IDataRecord.GetByte,在這種情況下,你應該檢查你用來訪問數據記錄的索引是否指向tinyint列。您可以檢查從GetValue返回的類型。對於tinyint列,它應該是byte

Trace.Assert(rdr.GetValue(j).GetType() == typeof(byte)); 

另一個選擇是放棄完全脆弱的數字索引:

int myInt = rdr.GetByte(rdr.GetOrdinal(TheNameOfTheTinyintColumn)) 
0

這類似於上公認的答案斯蒂芬·克利裏的評論,但我需要指定爲int的大小。這爲我工作:

int value = Convert.ToInt32(rdr.GetValue(j)); 

(它也使用一個int提供的數據庫列的向後兼容性。)