我正在讀取SQL Server表中的一行。其中一列是tinyint類型。C中的整數字節#
我想將值變成int或int32變量。
rdr.GetByte(j)
(byte) rdr.GetValue(j)
...似乎是檢索值的唯一方法。但是,我如何將結果變成int
變量?
我正在讀取SQL Server表中的一行。其中一列是tinyint類型。C中的整數字節#
我想將值變成int或int32變量。
rdr.GetByte(j)
(byte) rdr.GetValue(j)
...似乎是檢索值的唯一方法。但是,我如何將結果變成int
變量?
int value = rdr.GetByte(j);
顯式的轉換是不需要的,因爲一個byte
到int
是擴大轉換(無數據丟失的可能性)。
鑄造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);
(int)rdr.GetByte(j)
查看文檔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
問題是如何將單個'byte'轉換爲'int'。 'BitConverter'處理'byte'數組,而不是單個'byte's。 – 2010-06-15 15:55:44
它仍然幫助我 – 2011-12-10 19:02:12
分配一個byte
到int
作品:
int myInt = myByte;
但是,也許你在裏面有一個例外IDataRecord.GetByte
,在這種情況下,你應該檢查你用來訪問數據記錄的索引是否指向tinyint
列。您可以檢查從GetValue
返回的類型。對於tinyint
列,它應該是byte
。
Trace.Assert(rdr.GetValue(j).GetType() == typeof(byte));
另一個選擇是放棄完全脆弱的數字索引:
int myInt = rdr.GetByte(rdr.GetOrdinal(TheNameOfTheTinyintColumn))
這類似於上公認的答案斯蒂芬·克利裏的評論,但我需要指定爲int的大小。這爲我工作:
int value = Convert.ToInt32(rdr.GetValue(j));
(它也使用一個int提供的數據庫列的向後兼容性。)
附:這是一個隱含的''字節'''int' – abatishchev 2010-06-15 15:54:01
我應該更具體。這是我已經嘗試過的。我收到「指定的演員表無效」。例外。我也試過: int value =(int)rdr.GetByte(j) and int value = Convert.ToInt(rdrGetByte(j)) – jtb 2010-06-15 16:08:38
@jtb:在我看來,你沒有得到帶索引j的tinyint列。什麼是異常堆棧跟蹤?錯誤必須發生在'GetByte'裏面。 – 2010-06-15 16:27:39