2016-08-11 5 views
1

私はのdataTableを返すクラスを作成したが、それは誤りC#でデータテーブルを返すクラスを作成する方法は?

エラー1「demo_C_Sharp.Cls_onnection.GetApprovedData(REF列)」が表示:\のVivek \ demoprojectの\デモ:すべてのコードパスが値Dを返さないしCシャープ\デモCシャープ\クラスファイル\ 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の部品が動作しない場合はどうなりますか?したがって、メソッドの最後に追加のバリアントが必要になります。

+0

'if'だけでなく' catch'にも返りがありません。 – quetzalcoatl

+0

私が言ったのは、あなたの説明では、IFとCATCHの両方で、同時にエラーが発生する場所についてです。 (あなたが修正として提案したコードは大丈夫です、ちょうどその説明にキャッチの問題についての言及がないと言っています) – quetzalcoatl

+1

'if'内の' return dtTbl; 'は今や冗長です –

1

リターンパスはtryブロック内にあります。これはいずれの時点でも失敗し、return文には到達しません。

例外を検出した場合でも、常にreturn文を必ず実行する必要があります。

2

メソッドから何かを返すか、例外をスローする必要があります。現在あなたのcatchブロックにはメッセージが表示されていますが、何もしません。あなたは例外を飲み込んでいるので、コードは続行できると期待していますが、メソッドから何を返すべきかは教えていませんが、これは許されません。

return文も "if"ブロック内にあるという点でも同様の問題があります。したがって、ifの条件が満たされない場合、コードはどこに行きますか?どこにも戻りません。

tryブロックの外でdtb1の宣言文とreturn文を移動することをお勧めします。または、catchブロック内に、空のDataTableオブジェクトを返します。状況に応じてnullの場合はnullを返し、ifの後にはさらにelseに同じ値を返します。

1

あなたの問題は、あなたが投稿に名前を付けるときではなく、方法でクラスに含まれています。とにかく、これは大きな問題ではありません。

また、エラーのヒントとして、何かを返す必要があります(nullまたは空のインスタンスDataTable)。

ここでは、接続が閉じられていない場合は、何も返さないため、このメッセージは表示されます。それが問題です。

解決策は、ifステートメントの残りのケースを処理するコードを追加する必要があります。

関連する問題