95

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」を真と偽のように振る舞わせる別の方法はありますか?

ありがとう!

4

9 に答える 9

169

どうですか:

return (returnValue == "1");

または以下に提案するように:

return (returnValue != "0");

正しいものは、成功の結果として何を求めているかによって異なります。

于 2010-04-15T18:46:01.233 に答える
119

1 行のコードで:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
于 2012-09-05T18:14:33.850 に答える
12

変換を常に成功させたい場合は、おそらく文字列を変換する最良の方法は、 asおよびその他のものを"1"asと見なすことです(Kevin のように)。または以外が返された場合に変換を失敗させたい場合は、次のようにすれば十分です (ヘルパー メソッドに入れることができます)。 truefalse"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.");
}
于 2010-04-15T18:55:40.433 に答える
5

戻り値の型を数値に設定します - char は必要ありません (使用しないでください)。数値 (0/1) は Convert.ToBoolean(num) で変換できます

それ以外の場合:ケビンの答えを使用してください

于 2010-04-15T18:49:52.750 に答える
2

または、ブール値が返されない場合は、次のようにすることができます。

bool boolValue = (returnValue == "1");
于 2014-11-18T23:18:51.073 に答える
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
于 2019-01-07T17:13:30.877 に答える
-1

変換したくない場合は、使用してください。

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

おそらく、必要に応じて値を返すでしょう。

于 2016-12-26T10:20:49.500 に答える