2010-04-15 176 views
67

我有一種方法是通過Odbc連接到數據庫。我調用 的存儲過程有一個從數據庫端返回的值是'Char'。現在我抓取 ,它以字符串形式返回值,並在簡單的if語句中使用它。我真的不喜歡比較像這樣的字符串的想法 當只有兩個值可以來自數據庫返回0和1如何將「0」和「1」轉換爲false和true

OdbcCommand fetchCommand = new OdbcCommand(storedProc, conn); 

fetchCommand.CommandType = CommandType.StoredProcedure; 
fetchCommand.Parameters.AddWithValue("@column ", myCustomParameter); 
fetchCommand.Parameters.Add("@myReturnValue", OdbcType.Char, 1) 
      .Direction = ParameterDirection.Output; 
fetchCommand.ExecuteNonQuery(); 

string returnValue = fetchCommand.Parameters["@myReturnValue"].Value.ToString(); 
if (returnValue == "1") 
{ 
    return true; 
} 

什麼是處理這種情況的正確方法。我已經嘗試了'Convert.ToBoolean()',它似乎是 就像明顯的答案,但我碰到'字符串未被識別爲有效的布爾值。被拋出的異常。我在這裏錯過了什麼 ,或者有另外一種方法讓'1'和'0'的行爲如真假一樣嗎?

謝謝!

回答

121

如何:

return (returnValue == "1"); 

或以下建議:

return (returnValue != "0"); 

正確的將取決於你在找什麼是成功的結果。

+7

正確嗎?檢查;簡潔?檢查;優雅?檢查。 +1。 – Earlz 2010-04-15 18:52:41

+6

我會推薦使用'return(returnValue!=「0」)'。更自然的是,'0'是'false',並且每個不爲零的數字都是'true'。當然這裏我們有Chris用字符串代替數字的情況,所以這個評論只是部分有效;) – Gacek 2010-04-15 18:54:12

+0

這總是一場辯論。 0也意味着ERROR_SUCCESS,這意味着一切進展順利。但我同意Gacek認爲這更自然。 – 2010-04-15 19:15:52

5

將返回類型設置爲數字 - 你不需要char(所以不要使用它);數值(0/1)可與Convert.ToBoolean(NUM)

轉換否則:使用凱文的回答

+0

我希望我們可以改變返回類型。但是,我們堅持它是什麼。 – Chris 2010-04-15 19:32:49

+5

'Convert.ToBoolean'只接受真/假/假/假字符串 – Yaro 2013-09-16 06:19:15

12

如果你想轉換總是成功,可能是最好的方式將字符串轉換會考慮"1"作爲true和其他任何東西false(如凱文一樣)。如果你想轉換如果返回比"1""0"以外的任何失敗,那麼下面就足夠了(你可以把它放在一個輔助方法):

if (returnValue == "1") 
{ 
    return true; 
} 
else if (returnValue == "0") 
{ 
    return false; 
} 
else 
{ 
    throw new FormatException("The string is not a recognized as a valid boolean value."); 
} 
+0

好主意,以捕捉無法識別的值。我不確定我想這樣做,但仍然是一個好主意。 – Chris 2010-04-15 19:34:19

74

在一個單一的代碼行:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue)) 
+1

並不像接受的答案那麼簡潔。 – BrianK 2014-10-03 01:20:26

+2

我喜歡你的版本克里斯,因爲正如問題所述,讓我們使用布爾值而不是比較字符串。 – Svet 2016-06-14 14:01:18

1

如果還沒有被返回的布爾值,你可以做這樣的事情:

bool boolValue = (returnValue == "1"); 
-1
(returnValue != "1" ? false : true); 
+1

不幸的是,這個解決方案返回一個字符串,而不是布爾值 – Drakes 2015-04-25 06:19:50

+1

這將如何返回一個字符串? 編輯:沒關係。我注意到了編輯。對於那個很抱歉。 – 2016-04-01 06:24:12

2

您可以使用形式:

return returnValue.Equals("1") ? true : false; 

或者更簡單(感謝Jurijs Kastanovs):

return returnValue.Equals("1"); 
+5

只需輸入「?true:false」位。這完全沒有必要。留在{return returnValue.Equals(「1」)} – 2016-05-31 10:23:57

-1

如果你不想convert.Just使用;

bool _status = status == "1" ? true : false; 

也許你會返回你想要的值。

相關問題