2014-10-10 37 views
0

我正在使用SQLite for ADO.NET,.NET v4.0二進制文件。查詢SQLite返回有符號int16,但被定義爲無符號

我嘗試根據數據庫提取內容填充類的數據時遇到了問題。

反射代碼:

var type = this.GetType(); 
var properties = type.GetProperties(); 

foreach(var property in properties) 
{ 
    property.SetValue(this, row[property.Name]); 
} 

然而,這將引發的異常:
類型的對象 'System.Int64' 不能被轉換爲類型 'System.UInt16形式'。

它試圖填充的值是ushort
在最初生成表的sql中,該列被定義爲'UNSIGNED SMALLINT',這對我的理解應該與C#ushort相同。

創建SQL-

CREATE TABLE [Monsters] 
         (
          [MonsterID]  UNSIGNED SMALLINT NOT NULL  UNIQUE, 
          [MonsterName] VARCHAR(50)   NOT NULL, 
          [ElementMask] UNSIGNED TINYINT NOT NULL, 
          [Str]   UNSIGNED TINYINT NOT NULL, 
          [Dex]   UNSIGNED TINYINT NOT NULL, 
          [Int]   UNSIGNED TINYINT NOT NULL, 
          [Con]   UNSIGNED TINYINT NOT NULL, 
          [Spd]   UNSIGNED TINYINT NOT NULL, 
          [ImageSetID] UNSIGNED SMALLINT NULL 
         ) 

卸下 'UNSIGNED' 代替拋出了此異常:
類型的對象 'System.Int16' 不能被轉換爲類型 'System.UInt16形式'。
給定有符號/無符號不匹配的情況。

以調試模式檢查行顯示預期數據。 http://i.stack.imgur.com/7Ayts.png

不太確定發生了什麼,所以任何幫助將不勝感激。

謝謝。

回答

0

SQLite使用dynamic typing;列類型將被忽略,並且返回值的類型僅取決於該值本身。使用PropertyType將該值轉換爲正確的類型。

+0

嗯,SQLite很奇怪。雖然有用。謝謝CL。 – Magusware 2014-10-10 18:41:11