如何在C#中从MySQL检索tinyint数据类型?
因此,在C#中,每当我从MSSQL数据库中检索到一个tinyint时,我都会使用以下cast如何在C#中从MySQL检索tinyint数据类型?,c#,mysql,tinyint,C#,Mysql,Tinyint,因此,在C#中,每当我从MSSQL数据库中检索到一个tinyint时,我都会使用以下cast (int)(byte)reader["MyField"]; 然而,这种转换在MySQL中似乎不起作用 我尝试过的 (byte)reader["MyField"]; 而且 (int)reader["MyField"]; 编辑1 例外情况 The specified cast is not valid. 编辑2 这是数据类型 {Name = "SByte" FullName = "System.SB
(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
不同
第一个是[direct]强制转换失败,因为实际对象类型是sbyte
,而不是byte
。后者将执行一个转换,该转换恰好使用了显式运算符(“显式转换”),但遗憾的是,它的语法看起来仍然像上面提到的[direct]强制转换。下面是一个it失败的SAN数据库示例:
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)
将对象转换为int并执行一些魔术(使用Convert.ToByte
可能会在溢出时引发异常)
快乐编码 我可以建议让系统自己工作吗?
DataReader类提供了获取正确值类型的功能:
reader.GetInt32("id");
reader.GetByte("MyByteField");
这样,读者就可以为你提供你所期望的类型。你的天才!让我快速看一下(一个很好的评论…但它本身并没有回答“如何”这个问题…)我试图帮助人们自助。@webdad3它提供了一个明确的方法来找出代码应该是什么样子。除此之外,OP还必须执行一小步来解决问题。VS2017:“此表达式会产生副作用,不会被评估”您是否尝试过reader[“MyField”]+0
?@Hans无法编译:表达式在那里键入object+int
,没有匹配的+
运算符。您是否尝试过int.Parse(reader[“MyField”].ToString())代码>?@Hans,这真的很有效。。。但是为什么呢?;-)我描述的两种方法是在不同数据类型之间编程并实际获取值的最懒惰的方法。第一个将自动调用任何隐式强制转换,将该对象转换为byte
、int
、double
、float
、或long
,然后可以将其转换为int。第二个将物理地获取对象的ToString()
,如果针对对象的类型正确实现,应返回一个数字字符串,int.Parse
应能作为int
读取。这些方法不需要知道数据类型是什么,而是使用特定于类型的方法(可能效率低下)。正确!我得等6分钟。+1,说真的,这件事一直在折磨我,让我不知所措,直到我读到这个答案!