【问题标题】:Exporting SQL db to an Excel issue将 SQL db 导出到 Excel 问题
【发布时间】:2019-05-23 18:29:03
【问题描述】:

我正在尝试设置一个按钮,以便轻松地将我的应用程序中的数据库导出到 Excel 工作表。但是我在让它工作时遇到了问题。 而且我无法弄清楚出了什么问题,因为我没有看到任何错误。

 {
            string cs = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf";
            SqlConnection con = new SqlConnection(cs);
            con.Open();
            SqlCommand command = new SqlCommand("SELECT * FROM AvSites", con);
            SqlDataAdapter dataadpter = new SqlDataAdapter(command);
            DataTable datatable = new DataTable("AvSites");
            dataadpter.Fill(datatable);
            datatable.WriteXml(Application.StartupPath + "AvSitesDbExport.xlsx");
            MessageBox.Show("export data");

        }

当我在调试模式下运行应用程序时,该按钮会在我的桌面上创建一个 xml (xlsx) 文件,我想这可以吗?由于它处于调试模式,因此不确定此处适用哪些规则。

但如果我发布应用程序,我看不到在任何地方创建的文件。

我做错了吗? Application.StartupPath 应该返回执行 .exe 的目录,对吧?

【问题讨论】:

  • 是的,但是如果你的exe没有写入权限,它就不能创建文件。在调试模式下,它可以因为 Visual Studio 权限。我认为这与 application.startuppath 无关

标签: c# sql winforms export writexml


【解决方案1】:
 {
            string cs = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf";
            SqlConnection con = new SqlConnection(cs);
            con.Open();
            SqlCommand command = new SqlCommand("SELECT * FROM AvSites", con);
            SqlDataAdapter dataadpter = new SqlDataAdapter(command);
            DataTable datatable = new DataTable("AvSites");
            WriteExcelWithNPOI(datatable,"xls")  /* "xls" or "xlsx"
            MessageBox.Show("export data");

        }
public void WriteExcelWithNPOI(DataTable dt, String extension)
      {           
          IWorkbook workbook;          

          if (extension == "xlsx") {
              workbook = new XSSFWorkbook();                
          }
          else if (extension == "xls")
          {
              workbook = new HSSFWorkbook();
          }
          else {
              throw new Exception("This format is not supported");
          }

          ISheet sheet1 = workbook.CreateSheet("Sheet 1");

          //make a header row
          IRow row1 = sheet1.CreateRow(0);

          for (int j = 0; j < dt.Columns.Count; j++)
          {

              ICell cell = row1.CreateCell(j);
              String columnName = dt.Columns[j].ToString();
              cell.SetCellValue(columnName);
          }

          //loops through data
          for (int i = 0; i < dt.Rows.Count; i++)
          {
              IRow row = sheet1.CreateRow(i + 1);
              for (int j = 0; j < dt.Columns.Count; j++)
              {

                  ICell cell = row.CreateCell(j);
                  String columnName = dt.Columns[j].ToString();
                  cell.SetCellValue(dt.Rows[i][columnName].ToString());
              }
          }

          using (var exportData = new MemoryStream())
          { 
              Response.Clear();                
              workbook.Write(exportData);
              if (extension == "xlsx") //xlsx file format
              {
                  Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                  Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "ContactNPOI.xlsx"));                   
                  Response.BinaryWrite(exportData.ToArray());             
              }
              else if (extension == "xls")  //xls file format
              { 
                  Response.ContentType = "application/vnd.ms-excel";
                  Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "ContactNPOI.xls"));
                  Response.BinaryWrite(exportData.GetBuffer());
              }   
              Response.End();
          }
      }

【讨论】:

  • 没有任何评论并没有多大帮助,而且响应功能无法识别。
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多