如何在C#中从MySQL中检索tinyint的数据类型?

时间:2012-06-06 22:00:01

标签: c# mysql tinyint

所以在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"}

3 个答案:

答案 0 :(得分:10)

要确定正确的类型,请查看

的值
reader["MyField"].GetType()

在调试器中。

答案 1 :(得分:8)

问题在于由于强制转换和显式运算符:

(byte)objectExpression(byte)sbyteExpression不同。

第一个是[direct] cast ,它失败了,因为真实对象类型是sbyte而不是byte。后者将执行转换恰好使用显式运算符(“显式转换”),其语法不幸地仍然看起来像[direct] 按照上面的方式投射。这是一个失败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可能会在溢出时抛出异常。)

快乐的编码!

答案 2 :(得分:0)

我可以建议让系统自行工作吗? DataReader 类提供了获取正确值类型的功能:

reader.GetInt32("id");
reader.GetByte("MyByteField");

通过这种方式,阅读器会为您提供您期望的类型。