错误:并非所有代码路径都返回一个值
我正在尝试从函数返回一个数据集但是收到此错误,
代码:
public partial class crystalReport_manual : System.Web.UI.Page
{
String conStr = WebConfigurationManager.ConnectionStrings["LoginDatabaseConnectionString"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
DataSet1 ds = Dataset_load("Select * from login");
ReportDocument rd = new ReportDocument();
rd.Load(Server.MapPath("CrystalReport.rpt"));
rd.SetDataSource(ds);
CrystalReportViewer1.ReportSource = rd;
}
public DataSet1 Dataset_load(String query)
{
SqlConnection sqlcon = new SqlConnection(conStr);
SqlCommand sqlCom = new SqlCommand("select * from Login", sqlcon);
SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCom);
// DataSet ds = new DataSet("CRDataSet");
try
{
sqlcon.Open();
//sqlCom.ExecuteNonQuery();
//sqlDA.Fill(ds,"Login");
DataSet1 ds = new DataSet1();
DataTable dt = new DataTable("DT_CR");
sqlDA.Fill(dt);
ds.Tables[0].Merge(dt);
return ds;
}
catch (Exception exc)
{
Response.Write(exc.Message);
}
finally
{
sqlcon.Close();
}
}
答案 0 :(得分:4)
如果发生异常,您的catch
或finally
块应该返回一些值。
由于您只是在finally
中关闭了连接,因此可以使用using
阻止:
public DataSet1 Dataset_load(String query)
{
DataSet1 ds = new DataSet1();
using(SqlConnection sqlcon = new SqlConnection(conStr))
using(SqlCommand sqlCom = new SqlCommand("select * from Login", sqlcon))
using (SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCom))
{
try
{
//sqlCom.ExecuteNonQuery();
//sqlDA.Fill(ds,"Login");
DataTable dt = new DataTable("DT_CR");
sqlDA.Fill(dt);
ds.Tables[0].Merge(dt);
return ds;
}
catch (SqlException se)
{
Response.Write(se.Message);
return null;
}
catch (Exception exc)
{
Response.Write(exc.Message);
return null;
}
}
}
using
内部转换为try-finally
块,并与IDisposable
中实现finally
的块一起使用,Dispose
阻止它调用SqlConnection
方法,因为{{ 1}},SqlCommand
和SqlDataAdapter
,所有实现IDisposable
都带有using
语句,它将在结尾处调用Dispose
来关闭连接。
答案 1 :(得分:1)
public DataSet1 Dataset_load(String query)
{
DataSet1 ds = new DataSet1();
using(SqlConnection sqlcon = new SqlConnection(conStr))
using(SqlCommand sqlCom = new SqlCommand("select * from Login", sqlcon))
using (SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCom))
{
try
{
//sqlCom.ExecuteNonQuery();
//sqlDA.Fill(ds,"Login");
DataTable dt = new DataTable("DT_CR");
sqlDA.Fill(dt);
ds.Tables[0].Merge(dt);
//return ds;
}
catch (SqlException se)
{
Response.Write(se.Message);
//return null;
}
catch (Exception exc)
{
Response.Write(exc.Message);
//return null;
}
}
return ds;
}
建立前一个用户的响应,如果在using语句的末尾返回一个空的DataSet,您可以随时检查ds.Tables.Count
以查看是否返回了任何内容。否则,您可以使用上面的逻辑和null
检查