C# C中的字节到整数#
我正在从SQL Server表中读取一行。其中一列为tinyint类型 我想将该值转换为int或int32变量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); 因为,您也可
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
不是字节。Tryint-value=Convert.ToInt(rdr.GetValue(j))
问题是如何将单个字节
转换为int
<代码>位转换器
处理字节
s的数组,而不是单个字节
s。
int myInt = rdr.GetByte(rdr.GetOrdinal(TheNameOfTheTinyintColumn))
int value = Convert.ToInt32(rdr.GetValue(j));