Odbc経由でデータベースに接続する方法があります。私が呼び出しているストアドプロシージャには、データベース側から 'Char'である戻り値があります。現在、私はその戻り値を文字列として取得し、単純なifステートメントで使用しています。データベースから0と1の2つの値しか返されない場合、このような文字列を比較するという考えは本当に好きではありません。
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」を真と偽のように動作させる別の方法がありますか?
ありがとう!
どうですか:
return (returnValue == "1");
または以下に示すように:
return (returnValue != "0");
正しいものは、成功の結果としてあなたが探しているものに依存します。
1行のコードで:
bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
変換を常に成功させたい場合、おそらく文字列を変換する最良の方法は、"1"
をtrue
と見なし、他のすべてをfalse
と見なすことです(Kevinと同様)。 "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.");
}
戻り値の型を数値に設定します-charは不要です(使用しないでください)。 Convert.ToBoolean(num)で数値(0/1)を変換できます
それ以外の場合:ケビンの答えを使用
そのフォームを使用できます:
return returnValue.Equals("1") ? true : false;
またはもっと簡単に(Jurijs Kastanovsに感謝):
return returnValue.Equals("1");
または、ブール値が返されない場合は、次のようなことができます。
bool boolValue = (returnValue == "1");
私の解決策(vb.net):
Private Function ConvertToBoolean(p1 As Object) As Boolean
If p1 Is Nothing Then Return False
If IsDBNull(p1) Then Return False
If p1.ToString = "1" Then Return True
If p1.ToString.ToLower = "true" Then Return True
Return False
End Function