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

mea*_*nny 8 c# mysql tinyint

所以在C#中每当我从MSSQL数据库中检索一个tinyint时,我就使用了以下转换.

(int)(byte)reader["MyField"];
Run Code Online (Sandbox Code Playgroud)

但是,这个演员似乎在MySQL中不起作用.

我试过了什么

(byte)reader["MyField"];
Run Code Online (Sandbox Code Playgroud)

只是

(int)reader["MyField"];
Run Code Online (Sandbox Code Playgroud)

编辑1

例外

The specified cast is not valid.
Run Code Online (Sandbox Code Playgroud)

编辑2

这是数据类型.

{Name = "SByte" FullName = "System.SByte"}
Run Code Online (Sandbox Code Playgroud)

usr*_*usr 10

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

reader["MyField"].GetType()
Run Code Online (Sandbox Code Playgroud)

在调试器中.

  • 我试着帮助别人自助. (8认同)
  • 你的天才!让我看起来很快 (2认同)
  • (一个很好的评论......但它并没有回答"如何"本身......) (2认同)

小智 8

问题是由于转换和显式运算符:

(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!)
Run Code Online (Sandbox Code Playgroud)

无论是使用(sbyte)objectExpression投有效期为真正的对象类型,或者Convert.ToInt32(objectExpression)它接受一个object和做一些魔法转换它为int.(使用Convert.ToByte可能会在溢出时抛出异常.)

快乐的编码!