2011-08-07 55 views
0

在我的表中,我使用IsTrue列的位類型。T-SQL中的位類型

當我執行select命令:

SqlDataReader reader = command.ExecuteReader(); 

我不知道那會是什麼reader["isTrue"]回報?

我試着做了比較

reader["isTrue"].ToString().Equals("0") 

,但它沒有很好地工作。有人能告訴我我做錯了什麼嗎?

+2

它「工作不正常」?那是什麼意思? 'reader [「isTrue」]。ToString()'return? – Gabe

+0

它沒有按照我的預期工作:) – Xitrum

+1

當某些東西不能按預期工作時,您應該發佈它如何工作以及您期望它如何工作。 – Gabe

回答

5

它返回一個布爾值。

bool value = (bool)reader["IsTrue"]; 

如果你知道在結果集中的列的索引,你可以使用:

bool value = reader.GetBoolean(index); 
+2

如果你不知道列的索引,'GetOrdinal'會告訴你它是什麼。 – Gabe

0

我喜歡擴展方法做到這一點:

public static bool ToBool(this string theString) 
    { 
     bool result = false; 
     bool.TryParse(theString, out result); 
     return result; 

    } 

而在你的代碼你可以簡單地做到這一點:

if(reader["isTrue"].ToBool()) 
{ 
} 

該ToBool擴展方法將在下列情況下返回真/假:

  • 如果假讀取器[ 「IsTrue運算」]返回DBNull.Value
  • 假如果讀取器[ 「IsTrue運算」]返回0(如位)
  • 真,如果讀者[「IsTrue運算」]返回1(如位)

當你執行它,除非「IsTrue運算」一欄未出現在結果集中,顯然它永遠不會拋出異常。

+0

因爲'bool.TryParse'已經將它設置爲默認值(即'false'),所以分配'result = false'沒有意義。在C#7中,這甚至可以簡化爲'bool.TryParse(theString,outbool結果);返回結果;'。 – Manuzor