string未被识别为有效BOOL

时间:2015-02-27 13:14:42

标签: c# string parsing boolean

 oComm = CreateCommand("IsMapAccessExist", spParams, TypeOfConnectionString.GeoAppBuilder);

bool exists = true;    
    exists = Boolean.Parse(oComm.ExecuteScalar().ToString());

    return exist

exists的值为'true'但会抛出错误

FormatException was caught
String was not recognized as a valid Boolean.

5 个答案:

答案 0 :(得分:3)

我觉得ExecuteScalar返回的内容不是 "True""False";也许是"1""0"。以下是调试方法:

var tmp = oComm.ExecuteScalar().ToString();
exists = Boolean.Parse(tmp);

然后查看调试器中tmp持有的内容。

答案 1 :(得分:1)

.ExecuteScalar()返回第一行的第一列。为了使它工作,做这样的事情:

int col = (int)oComm.ExecuteScalar();
if(col == null)
    exists = false;
else
    exists = true;

答案 2 :(得分:0)

ExecuteScalar不返回布尔值。阅读文档Here

答案 3 :(得分:0)

Boolean.Parse 必须传递“True”(Boolean.TrueString)或“False”(Boolean.FalseString)。

您可能最好使用Boolean.TryParse,例如:

string value = "true";
bool couldParseString = Boolean.TryParse(value, out value);
if ( couldParseString )
{
    // do some stuff
}
else
{
    // handle the string not being correct
}

注意:您通常应该使用{type}。尝试 Parse而不是Parse。

答案 4 :(得分:0)

虽然已经很晚了,但这是一个使用Boolean.TryParse的答案。

bool exists;    // No need to assign   
Boolean.TryParse(oComm.ExecuteScalar().ToString(),exists); // using TryParse

return exist; 

说明:(MSDN

  

如果转化succeeded,则包含true,如果值等于   如果值等于TrueString,则falseFalseString。如果   转化failed,包含false

即使该值不是有效的TrueStringFalseString字段,您也始终会获得所需的值。

意图是不惜任何代价避免例外。即使失败也会返回false,但程序将继续不停。

  

TryParse方法类似于Parse方法,但如果转换失败,TryParse方法不会抛出异常。