为什么else分支没有被执行
本文关键字:执行 else 分支 为什么 | 更新日期: 2023-09-27 18:17:16
这实际上是一个工作应用程序。尽管没有太多的错误捕获方式。
我只是想记录流程,没有到达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 ");
}
}
如果使用while reader.read(),则不需要检查reader是否有行。如果reader没有返回任何行,While循环将不会执行。因此,如果reader没有行,则永远不会到达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 ");
}
如果没有行可读,则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行(就像读取主键一样),您可以简化代码,只需将reader.Read()
放在if
中:
if (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行,因此HasRows将返回true。将HasRows测试移到之外的while
如果您没有到达两个分支中的任何一个,那么一定是因为reader.Read())
返回false
。
很可能您的reader.Read()调用发现没有行,因为文件由于某种原因未打开或为空。因此,在读取后检查新的HasRows不会像您期望的那样工作。
反向逻辑:
if (reader.HasRows)
{
while (reader.Read())
{
//Process a row
}
else
{
LogMessage("Payment Retrievlal Failed ");
}