2015-05-04 32 views
1

如果我有一個TINYINT(1)列的表,並用DataReader選擇此列,MySQL創建一個布爾列。強制MySQL連接器.NET返回一個布爾值

 var query = "SELECT column FROM table"; 
     using (var reader = ExecuteReader(query)) 
     { 
      var schemaTable = reader.GetSchemaTable(); 
      var row = schemaTable.DefaultView[0]; 
      Assert.AreEqual(typeof(bool), row["DataType"]); 
     } 

但是,如果我有一個查詢不起作用。

 var query = "SELECT false"; 
     using (var reader = ExecuteReader(query)) 
     { 
      var schemaTable = reader.GetSchemaTable(); 
      var row = schemaTable.DefaultView[0]; 
      Assert.AreEqual(typeof(bool), row["DataType"]); 
     } 

這個測試失敗,因爲數據類型是System.Int64

是否可以強制查詢返回TINYINT(1)值?在大局,我讓實體框架生成我的模型,我有一些視圖與創建爲System.Int64的布爾列,我想這將解決這個問題。

回答

0

您是否嘗試過使用CONVERT或CAST?

var query = "SELECT CONVERT(0,TINYINT(1))" 
var query = "SELECT CAST(0 AS TINYINT(1))" 

編輯:這似乎是在MySQL中的CAST/CONVERT函數的限制。一個建議的解決方案是創建一個函數來完成鑄造

CREATE FUNCTION x_cast_to_tinyint(number bigint) RETURNS tinyint 
BEGIN return number; 
END 

然後調用函數

select x_cast_to_tinyint(d.tiny_int*1) as tiny 

參考:http://idiot-howto.blogspot.com/2008/07/mysql-cast-limitation.html#!/2008/07/mysql-cast-limitation.html

+0

我一樣,MySQL只允許'CAST 0作爲符號/ UNSIGNED'這將導致Int64 - https://dev.mysql.com/doc/refman/5.0/en/cast-functions.html –