无法将多个gridview导出到多个excel

时间:2019-03-13 15:46:44

标签: c# asp.net sql-server openxml

我试图在一本工作簿中将几个gridview导出到几个excel工作表中,我查看了很多示例,但还没有找到一个很好的例子。我从具有4000多个记录的存储过程中获取数据。我会在单独的gridviews上显示数据,然后使用一个按钮将其全部导出到一个工作簿中

当我尝试对其进行测试时,会在 sda.Fill(ds); 处获得以下信息:

  

System.Data.dll中发生类型为'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理

     

其他信息:执行超时已过期。超时时间   操作完成前已过去或服务器未运行   响应。

这是我的代码:

using OfficeOpenXml;
using System.Configuration;
using DocumentFormat.OpenXml;
using ClosedXML;


 string strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["PostbankConnectionString"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(strConnString);

    SqlCommand command = new SqlCommand("spTest", con) { CommandType = System.Data.CommandType.StoredProcedure };

    SqlDataAdapter sda = new SqlDataAdapter();

    command.CommandTimeout = 300;


    command.Connection = con;
    sda.SelectCommand = command;

    DataSet ds = new DataSet();

    sda = new SqlDataAdapter("spTest", con);

    sda.Fill(ds);
    GridView1.DataSource = ds.Tables[0];
    GridView1.DataBind();
    GridView2.DataSource = ds.Tables[1];
    GridView2.DataBind();
    GridView3.DataSource = ds.Tables[2];
    GridView3.DataBind();
    GridView4.DataSource = ds.Tables[3];
    GridView4.DataBind();
    GridView5.DataSource = ds.Tables[4];
    GridView5.DataBind();
    con.Close();


}
protected void Button1_Click(object sender, System.EventArgs e)
{


    SqlConnection con = new SqlConnection(strConnString);

    SqlCommand command = new SqlCommand("spTest", con) { CommandType = System.Data.CommandType.StoredProcedure };

    SqlDataAdapter sda = new SqlDataAdapter();


    command.Connection = con;
    sda.SelectCommand = command;

    DataSet ds = new DataSet();

    sda = new SqlDataAdapter("spTest", con);


    sda.Fill(ds);
    if (ds.Tables.Count > 0)
    {
        MemoryStream ms = new MemoryStream();

        using (ExcelPackage package = new ExcelPackage(ms))
        {
            foreach (DataTable table in ds.Tables)
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet" + i++);
                worksheet.Cells["A1"].LoadFromDataTable(table, true);
            }
            Response.Clear();
            package.SaveAs(Response.OutputStream);
            Response.AddHeader("content-disposition", "attachchment; filename=Example.xlxs");
            Response.Charset = "";
            Response.ContentType = "application/vnd.xls";
            Response.End();
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

您是否尝试过在Button1_Click事件上设置command.CommandTimeout = 300,以及在此处的代码中看不到该错误,还是在Page_Load事件本身上遇到了错误?尝试将超时也增加到600,看看是否有效


如果以上方法均无效,那么您现在可以尝试通过添加where子句来稍微更改sp,以便代替4000行,它仅提供10行或类似的内容,然后执行您的代码。这样,如果它正确执行,那么至少可以确保由于返回的行数更多而导致异常。 但是,如果这样做仍然面临着相同的问题,那么建立连接可能出问题了。