2017-02-03 150 views
-5

我在方法getdatatoTextbox中收到錯誤「不是所有代碼路徑都返回值」。C#錯誤 - 並非所有代碼路徑返回值

請幫我解決這個問題。

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

看看在你的代碼的所有路徑。他們所有人都返回一個值,否則拋出異常?如果你碰到catch block會發生什麼?你想要發生什麼?調用此方法的人想要發生什麼? –

回答

9

如果正在返回異常沒有的情況下,如果你有你的方法非void返回類型是無效的。也絕不會吞下異常,它的不良做法,當出現問題時,您稍後再回過頭來問問原因。

另一方面,您應該將所有的一次性用品包裝在using區塊中。如果你的查詢失敗,你的Db連接將保持打開你的代碼現在的狀態,我知道你已經在finally中配置了,但是它不會編譯,因爲你在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; 
    } 
} 
相關問題