如何在 C# 中从 MySQL 中检索 tinyint 的数据类型
本文关键字:检索 tinyint 数据类型 MySQL 中从 | 更新日期: 2023-09-27 18:36:23
所以在C#中,每当我从MSSQL数据库中检索到一个微小的时,我都会使用以下强制转换。
(int)(byte)reader["MyField"];
但是,该转换似乎在MySQL中不起作用。
我试过什么
(byte)reader["MyField"];
只是
(int)reader["MyField"];
编辑 1
例外
The specified cast is not valid.
编辑 2
这是数据类型。
{Name = "SByte" FullName = "System.SByte"}
问题是由于强制转换和显式运算符:
(byte)objectExpression
与(byte)sbyteExpression
不同。
第一个是 [直接] 强制转换,它失败了,因为真正的对象类型是 sbyte
而不是 byte
。后者将执行一个转换,恰好使用显式运算符("显式转换"),不幸的是,语法仍然看起来像如上所述的[直接]强制转换。下面是一个失败的无数据库示例:
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
可能会在溢出时引发异常。
祝您编码愉快!
要确定正确的类型,请查看
reader["MyField"].GetType()
在调试器中。
我可以建议让系统对自己不利吗?类提供了用于获取正确类型的值的功能:
reader.GetInt32("id");
reader.GetByte("MyByteField");
这样,阅读器为您提供所需的类型。