2011-12-09 79 views
4

這實際上是一個工作應用程序。雖然沒有太多的錯誤陷阱的方式。爲什麼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 "); 
    } 
} 
+4

你上前一步直通代碼? –

+15

如果兩者都未達到,那麼顯然'reader.Read()'返回的結果爲false。 –

回答

11

如果您正在使用reader.read()時,您不需要檢查reader是否有行。如果reader沒有返回行,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 "); 
} 
+0

哈哈,我們在同一時間添加了幾乎相同的代碼......好笑!我也會+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 "); 
    } 

現在,如果你知道,只有至多排返回(喜歡閱讀在主鍵),可以簡化代碼,只是把if,而不是內部的reader.Read()

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 "); 
} 
2

如果你有剛剛成功讀取一行,日顯然至少有1行,所以HasRows將返回true。移動HasRows測試的「而」

2

如果沒有達到或者兩個分支,那一定是因爲reader.Read())回報false。我沒有看到另一種實現它的方式。

0

您的reader.Read()調用很可能找不到任何行,因爲該文件由於某種原因未打開或爲空。因此,在讀取後檢查新的HasRows無法按預期工作。

0

反向邏輯:

if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
    //Process a row 
    } 
else 
{ 
    LogMessage("Payment Retrievlal Failed "); 
}