因此,在 C# 中,每当我从 MSSQL 数据库检索 tinyint 时,我都会使用以下转换。
(int)(byte)reader["MyField"];
然而,这种转换似乎在 MySQL 中不起作用。
我尝试过的
(byte)reader["MyField"];
并且只是
(int)reader["MyField"];
Edit 1
例外
The specified cast is not valid.
Edit 2
这是数据类型。
{Name = "SByte" FullName = "System.SByte"}
问题是由于强制转换和显式运算符:
(byte)objectExpression
是不一样(byte)sbyteExpression
.
第一个是[直接]cast失败是因为真实的对象类型是sbyte
并不是byte
。后者将执行一个转换只是碰巧使用了显式运算符(“显式转换”),其语法不幸的是,仍然looks就像[直接]cast如上所述。这是一个无数据库失败的示例:
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
并施展一些魔法convert它为一个 int。 (使用Convert.ToByte
可能会在溢出时抛出异常。)
快乐编码!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)