2016-08-11 40 views
1

我創建返回一個數據表中的類,但是它顯示一個錯誤如何創建在c#中返回數據表的類?

錯誤1「demo_C_Sharp.Cls_onnection.GetApprovedData(參照字符串)」:不是所有的代碼路徑返回一個值d:\的Vivek \ demoproject \演示升C \演示升C \ class文件\ Cls_onnection.cs 45 26演示升C

我創建了以下方法:

public DataTable GetApprovedData(ref string tablename) 
     { 
      try 
      {   
      if (cnn.State==System.Data.ConnectionState.Closed) 
       { 
        dtTbl = new DataTable(); 
        cnn.Open(); 
        cmd = new SqlCommand("USP_Billing_GetApprovedData", cnn); 
        cmd.CommandTimeout = 5000; 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.Parameters.AddWithValue("@ProcessName", tablename); 

        da = new SqlDataAdapter(cmd); 
        da.Fill(dtTbl); 
        return dtTbl; 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      }  
+5

可能重複的[不是所有的代碼路徑返回值,而使用Try Catch](http://stackoverflow.com/questions/36578334/not-all-code-paths-return-value-while-using-try-catch ) – quetzalcoatl

回答

2

所有部件必須在這裏返回value.See

只返回if部分,如果if部分不起作用,該怎麼辦?所以你還需要額外的變體,它可能在方法的最後。

public DataTable GetApprovedData(ref string tablename) 
{ 
    dtTbl = new DataTable(); 

    try 
    {    
     if (cnn.State==System.Data.ConnectionState.Closed) 
     { 
      cnn.Open(); 
      cmd = new SqlCommand("USP_Billing_GetApprovedData", cnn); 
      cmd.CommandTimeout = 5000; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@ProcessName", tablename); 

      da = new SqlDataAdapter(cmd); 
      da.Fill(dtTbl); 

     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
     cnn.Close(); 
    } 

    return dtTbl; 
} 
+0

不僅'if'還有'catch'缺少返回 – quetzalcoatl

+0

我的意思是說,在你的解釋中,你只告訴IF IF和CATCH同時導致錯誤的地方。 (你提出的解決方案的代碼沒問題,我只是說解釋中沒有提到有關catch的問題) – quetzalcoatl

+1

'return dtTbl;'if內現在是多餘的 –

1

您的返回路徑位於try塊中,該塊可能在任何時候都失敗並且無法到達return語句。

即使遇到異常,您也需要確保始終按回車語句。

2

你必須從方法中返回一些東西,或拋出異常。目前在您的catch區塊中,您正在顯示一條消息,但是除此之外別無其他。你在吞噬異常,所以代碼期望能夠繼續,但是你不會告訴它從方法返回什麼,這是不允許的。

還有一個類似的問題,即return語句也在「if」塊中。所以當「if」的條件不滿意時,代碼在哪裏去?沒有地方,這意味着它不知道該返回那裏。

我建議你在try塊之外移動dtb1的聲明和返回語句。或者,在catch塊內返回一個空的DataTable對象,或者如果這適用於您的情況,則返回null,在if之後的另一個else中返回相同的值。

1

您的問題不在您指定的職位,但在方法中。無論如何,這不是一個大問題。

此外,由於錯誤提示你,你必須總是返回一些東西(應該是nullDataTable的空實例)。

這裏它抱怨,因爲在連接沒有關閉的情況下,該方法不會返回任何東西。這就是問題所在。

您的解決方案應該是這樣的,您應該添加一個代碼來處理if語句的其餘案例。

相關問題