C# 单击按钮将SQL查询结果保存到Excel文件

C# 单击按钮将SQL查询结果保存到Excel文件,c#,sql,excel,asp.net-mvc-4,C#,Sql,Excel,Asp.net Mvc 4,我有一个Asp.NETMVCWeb应用程序,其中一个网页具有链接导出,运行一个C函数,该函数具有SQL查询,将数据导出到excel文件并保存在本地计算机上。一旦保存操作完成,它应该返回到名为admin的页面,由于某些原因,它没有这样做,而是返回到一个空页面 我在控制器中有以下代码 [Authorize(Roles = "Admin")] public ActionResult ExportWBData() { sqlcon.Ope

我有一个Asp.NETMVCWeb应用程序,其中一个网页具有链接导出,运行一个C函数,该函数具有SQL查询,将数据导出到excel文件并保存在本地计算机上。一旦保存操作完成,它应该返回到名为admin的页面,由于某些原因,它没有这样做,而是返回到一个空页面

我在控制器中有以下代码

[Authorize(Roles = "Admin")]
        public ActionResult ExportWBData()
        {

                sqlcon.Open();
                string strGetAllWBData = @"select Product, Term, BidVolume, BidCP as BidCounterParty, Bid, Offer, OfferCP as OfferCounterParty, OfferVolume from CanadianCrudes";

                SqlCommand cmdGetAllWBData = new SqlCommand(strGetAllWBData, sqlcon);
                DataTable dtGetAllWBData = new DataTable();
                SqlDataAdapter daGetAllWBData = new SqlDataAdapter();

                daGetAllWBData.SelectCommand = cmdGetAllWBData;
                daGetAllWBData.Fill(dtGetAllWBData);
                sqlcon.Close();

                Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
                Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
                worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Sheets["Sheet1"];
                worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workbook.ActiveSheet;

                for (int i = 0; i < dtGetAllWBData.Rows.Count; i++)
                {
                    for (int j = 0; j < dtGetAllWBData.Columns.Count; j++)
                    {
                        worksheet.Cells[1, j + 1] = dtGetAllWBData.Columns[j].ToString();
                        worksheet.Cells[i + 2, j + 1] = dtGetAllWBData.Rows[i][j].ToString();
                    }
                }

                string fromFormat = "dd/MM/yyyy";
                string toFormat = "MM-dd-yyyy";

                DateTime newDate = DateTime.ParseExact(DateTime.Today.ToString(fromFormat), fromFormat, null);


                string filedate = newDate.ToString(toFormat);


                workbook.SaveAs(@"Z:\WBDomesticDumps\WBData " + filedate + ".xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                workbook.Close(true, Type.Missing, Type.Missing);
                app.Quit();

                return Admin();  
        }
布局页面是

<li>@Html.ActionLink("Export", "ExportWBData", "Home")</li>

我可以知道一个更好的方法吗?

imo,最简单的方法是创建一个视图,用于写入数据的HTML表。如果随后将内容类型标题设置为application/vnd.ms-excel,则大多数浏览器会将其识别为excel文件,并提示您打开或保存

这样做的好处是,您可以使用常规视图模板razor或其他方式来管理视图逻辑,而控制器逻辑最终会变得更干净。

简单修复 替换

返回管理员 与


您的Excel函数看起来不错。我相信问题在于你的回归

应该是这样的:

return RedirectToAction("Admin");

虽然这可能回答了这个问题,但代码式答案通常对未来的访问者没有用处。最好解释一下代码的作用以及为什么这是OP问题的最佳解决方案。
return RedirectToAction("Admin");