[英]How do I retrieve a data type of tinyint from MySQL in C#?
因此,在 C# 中,每当我从 MSSQL 数据库中检索 tinyint 时,我都会使用以下强制转换。
(int)(byte)reader["MyField"];
但是,该演员表在 MySQL 中似乎不起作用。
我试过的
(byte)reader["MyField"];
只是
(int)reader["MyField"];
编辑 1
例外
The specified cast is not valid.
编辑 2
这是数据类型。
{Name = "SByte" FullName = "System.SByte"}
要确定正确的类型,请查看的值
reader["MyField"].GetType()
在调试器中。
问题是由于强制转换和显式运算符:
(byte)objectExpression
与(byte)sbyteExpression
。
第一个是[直接]铸造因为真正的对象类型是失败sbyte
而不是byte
。 后者将执行恰好使用明确的运算符(“显式转换”)的语法,不幸的是,看起来还是像[直接]投按上述转换。 以下是 sans-database 失败的示例:
var obj = (object)(sbyte)0;
var i1 = (int)(sbyte)obj; // okay: object (cast)-> sbyte (conversion)-> int
var i2 = (int)obj; // fail: sbyte (cast)-> int (but sbyte is not int!)
要么使用对真实对象类型有效的(sbyte)objectExpression
,要么使用Convert.ToInt32(objectExpression)
接受一个object
并执行一些魔法将其转换为 int。 (使用Convert.ToByte
可能会在溢出时引发异常。)
快乐编码!
我可以建议让系统对自己工作吗? DataReader 类提供了获取正确类型值的功能:
reader.GetInt32("id");
reader.GetByte("MyByteField");
通过这种方式,阅读器为您提供您期望的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.