这实际上是一个有效的应用程序。虽然没有太多的错误捕获方式。
我只是想记录流程,但是没有到达If分支或else分支。 我该怎么做才能实现这一目标?分支的任何一方都没有登录我的txt文件。
while (reader.Read())
{
if (reader.HasRows)
{
LogMessage("Further Inside Try2 ");
byte[] paymentData = (byte[])reader["payment"];
strPaymentData = ASCIIEncoding.Unicode.GetString(paymentData);
LogMessage(strPaymentData + " strPaymentData");
}
else
{
LogMessage("Payment Retrievlal Failed ");
}
}
答案 0 :(得分:11)
如果您在reader.read()中使用,则无需检查读者是否有行。如果reader没有返回任何行,则while循环将不会执行。因此,如果读者没有行,则永远不会达到else。
您可以按如下方式重写代码:
if (reader.HasRows)
{
while (reader.Read())
{
LogMessage("Further Inside Try2 ");
byte[] paymentData = (byte[])reader["payment"];
strPaymentData = ASCIIEncoding.Unicode.GetString(paymentData);
LogMessage(strPaymentData + " strPaymentData");
}
}
else
{
LogMessage("Payment Retrievlal Failed ");
}
答案 1 :(得分:7)
reader.Read()
会返回false
。因此,如果您想要对没有返回的行进行特殊处理,则需要将该检查移到while
之外:
if (reader.HasRows())
{
while (reader.Read())
{
LogMessage("Further Inside Try2 ");
byte[] paymentData = (byte[])reader["payment"];
strPaymentData = ASCIIEncoding.Unicode.GetString(paymentData);
LogMessage(strPaymentData + " strPaymentData");
}
}
else
{
LogMessage("Payment Retrievlal Failed ");
}
现在,如果你知道只返回最多1行(比如读取主键),你可以简化代码只需放{{1而在reader.Read()
内改为:
if
答案 2 :(得分:2)
如果只是成功读取了一行,那么显然至少有一行,因此HasRows将返回true。将HasRows测试移到外面
答案 3 :(得分:2)
如果您未到达两个分支中的任何一个,则必须是因为reader.Read())
返回false
。我没有看到另一种方法来实现它。
答案 4 :(得分:0)
您的reader.Read()调用很可能发现没有行,因为文件由于某种原因未打开或为空。因此,在读取后检查新的HasRows不能按预期工作。
答案 5 :(得分:0)
颠倒逻辑:
if (reader.HasRows)
{
while (reader.Read())
{
//Process a row
}
else
{
LogMessage("Payment Retrievlal Failed ");
}