0

Excel ファイルから SQL Server データベースにデータをロードする必要があります。Excel ファイルは、Web アプリケーションからデータ セットにデータをダウンロードすることによって作成されます。データは SQL Server データベースのテーブルから取得され、Excel が生成されます。この同じ Excel ファイルを同じテーブルにアップロードしようとすると、エラーが発生します。

 HResult=-2147467259 Message=Could not find installable ISAM.
 Source=Microsoft JET Database Engine ErrorCode=-2147467259

「Report.xls」のファイル形式と拡張子が一致しません。ファイルが破損していないか、安全でない可能性があります。ソースが信頼できない場合は、開かないでください。それでも開きますか?

データをデータベースに保存するコードは次のとおりです

      private void SaveFileToDatabase(string filePath)
      {
          String fileExtension = Path.GetExtension(filePath);
          String excelConnString = string.Empty;

          //Create connection string to Excel work book
          if (fileExtension == ".xls")
          {
              excelConnString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1""", filePath);
              //String excelConnString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties="Excel 8.0;HDR=Yes;IMEX=1""", filePath);
          }
          else
          {
              excelConnString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0""", filePath);
          }

          //Connection to Excel work book 
          using (OleDbConnection excelConnection = new OleDbConnection(excelConnString))
          {
              //OleDbCommand to fetch data from Excel 
              using (OleDbCommand cmd = new OleDbCommand("Select * from [working$]", excelConnection))
              {
                  excelConnection.Open();
                  using (OleDbDataReader dReader = cmd.ExecuteReader())
                  {
                      using (SqlBulkCopy sqlBulk = new SqlBulkCopy(connect))
                      {
                          DBUtilities.RunSQLCommand("truncate table dbo.[DatabaseTable]");

                          //Destination table in db
                          sqlBulk.DestinationTableName = " DatabaseTable ";
                          sqlBulk.WriteToServer(dReader);
                      }
                  }
          }
      }
      }

テーブルのデータから Excel ファイルを作成するコード

    private void ExportDataToExcel(String sprocCommand, String workBookName)
    {
        try
        {
            string attachment = "attachment; filename=report.xls";

            Response.Clear();
            Response.Buffer = true;
            Response.Charset = string.Empty;
            Response.AddHeader("cache-control", "private");
            Response.AddHeader("Content-disposition", attachment);
            //Response.AddHeader("Content-type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            Response.ContentType = "application/vnd.xls";
            EnableViewState = false;

            DataTable dt = DBUtilities.GetData();
            DataView dv = dt.DefaultView;

            dt = null;
            dt = dv.ToTable();

            Response.Write(SendExcelXMLFormat(dt, workBookName));

            Response.End();
        }
        catch (Exception Ex)
        {
            ////TOOD   
        }
    }

    private string SendExcelXMLFormat(DataTable dTable, string WorkSheetName)
    {
        StringBuilder sb = new StringBuilder();

        sb.AppendLine("<?xml version=\"1.0\"?> ");
        sb.AppendLine("<?mso-application progid=\"Excel.Sheet\"?> ");
        sb.AppendLine("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
        sb.AppendLine("xmlns:o=\"urn:schemas-microsoft-com:office:office\" ");
        sb.AppendLine("xmlns:x=\"urn:schemas-microsoft-com:office:excel\" ");
        sb.AppendLine("xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
        sb.AppendLine("xmlns:html=\"http://www.w3.org/TR/REC-html40\"> ");
        sb.AppendLine("<Styles> ");
        sb.AppendLine("<Style ss:ID=\"s41\" ss:Name=\"60% - Accent1\"> ");
        sb.AppendLine("<Font ss:FontName=\"Calibri\" x:Family=\"Swiss\" ss:Size=\"11\" ss:Color=\"#FFFFFF\"/> ");
        sb.AppendLine("<Interior ss:Color=\"#95B3D7\" ss:Pattern=\"Solid\"/> ");
        sb.AppendLine("</Style> ");
        sb.AppendLine("</Styles> ");
        sb.AppendLine("<Worksheet ss:Name=\"" + WorkSheetName+"\"> ");
        sb.AppendLine("<Table>");

        // Header Row
        sb.AppendLine("<Row ss:AutoFitHeight=\"0\"> ");
        foreach (DataColumn dc in dTable.Columns)
        {
            sb.AppendLine("<Cell ss:StyleID=\"s41\"><Data ss:Type=\"String\">" + dc.ColumnName + "</Data></Cell> ");
        }
        sb.AppendLine("</Row> ");

        // Data Rows
        foreach (DataRow row in dTable.Rows)
        {
            sb.AppendLine("<Row ss:AutoFitHeight=\"0\"> ");
            for (int i = 0; i < dTable.Columns.Count; i++)
            {
                sb.AppendLine("<Cell><Data ss:Type=\"String\">" + Server.HtmlEncode(row[i].ToString()) + "</Data></Cell> ");
            }
            sb.AppendLine("</Row> ");
        }

        sb.AppendLine("</Table> ");
        sb.AppendLine("</Worksheet> ");
        sb.AppendLine("</Workbook> ");

        return sb.ToString();
    }
4

1 に答える 1

1

Excel から SQL Server にデータを保存する場合は、このリンクを参照してください

http://www.codeproject.com/Tips/593181/Load-GridView-from-Excel

ここで、Excel からグリッドビューをロードし、SQLBulkCopy() を使用して Excel の内容を SQL Server にコピーします。注: gridview から個々の行を取得して、データベースに挿入することもできます。

参考になるかもしれませんのでご覧ください。

于 2013-11-12T12:25:49.633 に答える