2017-02-03 18 views
-5

メソッドgetdatatoTextboxに「すべてのコードパスが値を返すわけではありません」というエラーが表示されます。C#エラー - すべてのコードパスの戻り値がありません

この問題を解決するのを手伝ってください。例外何のイベントは、あなたの方法で非void戻り値の型を持っている場合は有効ではありませんどの返されている場合は

private DataTable getdatatoTextbox(int RegistrationId) 
{ 
    try 
    { 
     SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=DotNetFunda;User id=sa;Password=sqluser"); 
     con.Open(); 
     SqlCommand sqlcmd = new SqlCommand("Getdatatotextbox", con); 
     sqlcmd.CommandType = CommandType.StoredProcedure; 
     sqlcmd.Parameters.AddWithValue("@RegistrationId", SqlDbType.Int).Value = RegistrationId; 
     DataTable dtdatanew = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(sqlcmd); 
     da.Fill(dtdatanew); 
     con.Close(); 
     return dtdatanew; 
    } 
    catch (Exception ex) 
    { 
    } 
    finally 
    { 
     con.Dispose(); 
    } 
} 
+1

リターンnullまたはスロー例外 – 0x4f3759df

+4

あなたのキャッチ{}あなたのコード内のすべてのパスで何 – Gusman

+2

ルックを返します。それらのすべてが値を返すか、それとも例外をスローしますか?キャッチブロックに当たったらどうなりますか?あなたは何をしたいですか?この方法を呼んでいる人は、何が起こりたいのですか? –

答えて

9

。また、例外を飲み込むことも、その悪い習慣を、決して何かがうまくいかないときは、後でSOに理由を問うことがあります。

もう1つの注意点として、すべてのDisposablesをusingブロックにラップする必要があります。あなたのクエリが失敗した場合、Db接続はあなたのコードと同じように開いたままになります。私はあなたが最後に処分されていることを知っていますが、それはあなたがtryブロックの中に定義したのでコンパイルされません。

これは問題を修正し、予期しないことが起こったときに例外(良いこと)を与えます。あなたはメソッドの外でそれを扱うことができますか、それは元の呼び出し元にバブルアップし、何かを行うことができます。

private DataTable getdatatoTextbox(int RegistrationId) 
{ 
    using(SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=DotNetFunda;User id=sa;Password=sqluser")) 
    using(SqlCommand sqlcmd = new SqlCommand("Getdatatotextbox", con)) 
    using(SqlDataAdapter da = new SqlDataAdapter(sqlcmd)) 
    { 
     con.Open(); 
     sqlcmd.CommandType = CommandType.StoredProcedure; 
     sqlcmd.Parameters.AddWithValue("@RegistrationId", SqlDbType.Int).Value = RegistrationId; 
     DataTable dtdatanew = new DataTable(); 
     da.Fill(dtdatanew); 
     return dtdatanew; 
    } 
} 
関連する問題