0

エラー: すべてのコード パスが値を返すわけではありません。

関数からデータセットを返そうとしていますが、このエラーが発生します。

コード:

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();
        }



    }
4

2 に答える 2

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ものと連携します。ブロックでは、、、およびがメソッドを呼び出します。IDisposablefinallyDisposeSqlConnectionSqlCommandSqlDataAdapterIDisposableusingDispose

于 2013-10-29T17:53:19.947 に答える