[英]How do I retrieve a data type of tinyint from MySQL in C#?
因此,在 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"}
要確定正確的類型,請查看的值
reader["MyField"].GetType()
在調試器中。
問題是由於強制轉換和顯式運算符:
(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!)
要么使用對真實對象類型有效的(sbyte)objectExpression
,要么使用Convert.ToInt32(objectExpression)
接受一個object
並執行一些魔法將其轉換為 int。 (使用Convert.ToByte
可能會在溢出時引發異常。)
快樂編碼!
我可以建議讓系統對自己工作嗎? DataReader 類提供了獲取正確類型值的功能:
reader.GetInt32("id");
reader.GetByte("MyByteField");
通過這種方式,閱讀器為您提供您期望的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.