C# C中的字节到整数#

C# C中的字节到整数#,c#,.net,sql-server,C#,.net,Sql Server,我正在从SQL Server表中读取一行。其中一列为tinyint类型 我想将该值转换为int或int32变量 rdr.GetByte(j) (byte) rdr.GetValue(j) …似乎是检索值的唯一方法。但是如何将结果放入int变量?int value=rdr.GetByte(j) 不需要显式强制转换,因为将字节转换为int是一种扩展转换(不存在数据丢失的可能性)。将字节转换为int应该可以正常工作: int myInt = (int) rdr.GetByte(j); 因为,您也可

我正在从SQL Server表中读取一行。其中一列为tinyint类型

我想将该值转换为int或int32变量

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

…似乎是检索值的唯一方法。但是如何将结果放入
int
变量?

int value=rdr.GetByte(j)


不需要显式强制转换,因为将
字节
转换为
int
是一种扩展转换(不存在数据丢失的可能性)。

将字节转换为int应该可以正常工作:

int myInt = (int) rdr.GetByte(j);
因为,您也可以这样做:

int myInt = rdr.GetByte(j);
您选择哪一个取决于您的偏好(无论您是否想要记录正在进行的演员阵容)。请注意,如果要使用,则需要显式强制转换,否则myInt将具有错误的类型:

var myInt = (int) rdr.GetByte(j);
请参阅文档(包含更多示例):


字节
分配给
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))

这与Stephen Cleary对已接受答案的评论类似,但我需要指定int的大小。这对我很有用:

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

(它还提供了与使用int的数据库列的向后兼容性。)

p.S.这是一个隐式转换
byte
int
I应该更具体一些。这就是我已经尝试过的。我得到一个“指定的强制转换无效”异常。我也尝试过:int-value=(int)rdr.GetByte(j)和int-value=Convert.ToInt(rdrGetByte(j))@jtb:在我看来,你没有得到索引为j的tinyint列。异常堆栈跟踪是什么?错误必须发生在
GetByte
内部。我同意@Jordao;听起来像是列
j
不是
字节。Try
int-value=Convert.ToInt(rdr.GetValue(j))
问题是如何将单个
字节
转换为
int
<代码>位转换器
处理
字节
s的数组,而不是单个
字节
s。
int myInt = rdr.GetByte(rdr.GetOrdinal(TheNameOfTheTinyintColumn))
int value = Convert.ToInt32(rdr.GetValue(j));