2017-02-03 151 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; 
    } 
} 
相关问题