How do I retrieve a data type of tinyint from MySQL in C#?
c#, mysql, tinyint
Solution
The problem is that due to casting and explicit operators:
`(byte)objectExpression` is is not the same as `(byte)sbyteExpression`.
The first is a [direct] cast which fails because the real object type is `sbyte` and not `byte`. The latter will perform a conversion that just happens to use a explicit operator (an "Explicit Conversion") with syntax that, unfortunately, still looks like a [direct] cast as per above. Here is an example of it failing 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!)
Either use an `(sbyte)objectExpression` cast which is valid for the real object type, or `Convert.ToInt32(objectExpression)` which takes an `object` and does some magic to convert it to an int. (Using `Convert.ToByte` could throw an exception on overflow.)
Happy coding!
Problem
So in C# whenever I retrieved a tinyint from my MSSQL database I used the following cast. ``` (int)(byte)reader["MyField"]; ``` However, that cast doesn't seem to work in MySQL. What I have tried ``` (byte)reader["MyField"]; ``` and just ``` (int)reader["MyField"]; ``` Edit 1 Exception ``` The specified cast is not valid. ``` Edit 2 This is the data type. ``` {Name = "SByte" FullName = "System.SByte"} ```