![](/img/trans.png)
[英]weird problem with OdbcDataReader.GetBoolean() throwing cast is not valid exception for bool column
[英]C# OdbcDataReader.GetBoolean InvalidCastException In IF-Statement
請原諒我的英語不好。
好吧,感謝所有參與討論的人,antiduh的調試方法可幫助我了解代碼中發生的情況。
當我使用OdbcDataReader.GetBoolean single時,沒問題,沒問題,如下所示:
OdbcDataReader reader = CMD.ExecuteReader();
reader.Read();
checkBox1.Checked = reader.GetBoolean(0);
不會出現任何問題。
但!!
我需要確定列是否為Null,所以我使用if語句,如下所示:
OdbcDataReader reader = CMD.ExecuteReader();
reader.Read();
if (reader.IsDBNull(0) == false)
checkBox1.Checked = reader.GetBoolean(0);
它將在reader.GetBoolean(0)上發生InvalidCastException錯誤。
我不知道這個問題,有人可以幫我嗎? 拜托〜
根據antiduh的寶貴評論,我發現if reader.GetValue(0)不在if語句中,如下所示:
OdbcDataReader reader = CMD.ExecuteReader();
reader.Read();
var foo = reader.GetValue(0);
它將返回True或False。
但是,如果reader.GetValue(0)位於if語句的內部,如下所示:
OdbcDataReader reader = CMD.ExecuteReader();
reader.Read();
if (reader.IsDBNull(0) == false)
{
var foo = reader.GetValue(0);
}
它將返回1或0。
因此,如果我使用GetBoolean將1或0轉換為bool數據類型,則會發生InvalidCastException。
現在我知道我的代碼會發生什么,但仍然不知道兩個代碼之間的區別。
再次感謝antiduh的寶貴評論,
我嘗試以下antiduh提供的代碼:
OdbcDataReader reader = CMD.ExecuteReader();
reader.Read();
if (reader.IsDBNull(0) == false)
{
try
{
checkBox1.Checked = reader.GetBoolean(0);
}
catch ( InvalidCastException e ) {
object doubleCheck = reader.GetValue(0);
Console.WriteLine( "Tried to cast this type: " + doubleCheck.GetType() );
}
}
它將返回:嘗試強制轉換此類型:System.String
並且doubleCheck.ToString()是1或0。
該行和列中的值實際上可能不是布爾值。 添加一些臨時調試代碼以捕獲異常,然后調用GetValue,然后看一下您實際返回的內容。
OdbcDataReader reader = CMD.ExecuteReader();
reader.Read();
if (reader.IsDBNull(0) == false)
{
try {
checkBox1.Checked = reader.GetBoolean(0);
}
catch ( InvalidCastException e ) {
object doubleCheck = reader.GetValue(0);
Console.WriteLine( "Tried to cast this type: " + doubleCheck.GetType() );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.