2017-02-20 9 views
0

.xslxインポートエラーSERVER(GoDaddyはウェブサーバ)では'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine. ...xslxインポートエラー 'Microsoft.ACE.OLEDB.12.0'

ソフトウェアをインストールするように指示ブログがたくさんあります。.. 2010および2007 oledb接続ソフトウェア.. 私のシステムは製品32ビット(x86)アーキテクチャと64ビットアーキテクチャです。 私はほぼ2日間試してみましたが、ローカルホストで.xlsと.xlsxの両方のインポートが正常に動作していますが、サーバを使用している間は.xlsxファイルのみで問題が発生しています。 dllは私は、サーバーで問題を解決できるように、サーバーのbinフォルダ..ここ

はコードです:

if (flexcel.HasFile) 
      { 
       name = rnd.Next(111, 9999).ToString() + "_" + System.IO.Path.GetFileName(flexcel.FileName); 
       string fileExtension = System.IO.Path.GetExtension(flexcel.FileName); 

       if (fileExtension == ".xls" || fileExtension == ".xlsx") 
       { 
        string fileLocation = Server.MapPath("../Content/MailMarketing/") + name; 

        if (System.IO.File.Exists(fileLocation)) 
        { 

         // System.IO.File.Delete(fileLocation); 
        } 
        flexcel.SaveAs(fileLocation); 
        string excelConnectionString = string.Empty; 
        //excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
        //Server.MapPath("~/Content/MailMarketing/") + flexcel.FileName + month + ";Extended Properties=\"Excel 12.0;\""; 
        ////connection String for xls file format. 
        if (fileExtension == ".xls") 
        { 
         excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
         fileLocation + ";Extended Properties=\"Excel 8.0;\""; 
        } 
        //connection String for xlsx file format. 
        else 
        //if (fileExtension == ".xlsx") 
        { 
         excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
         Server.MapPath("../Content/MailMarketing/" + name) + ";Extended Properties=Excel 12.0;"; 
        } 
        //Create Connection to Excel work book and add oledb namespace 
        OleDbConnection excelConnection = new OleDbConnection(excelConnectionString); 
        excelConnection.Open(); 
        DataTable dt = new DataTable(); 

        dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
        if (dt == null) 
        { 
         return; 
        } 

        String[] excelSheets = new String[dt.Rows.Count]; 
        int t = 0; 
        //excel data saves in temp file here. 
        foreach (DataRow row in dt.Rows) 
        { 
         string x = row["TABLE_NAME"].ToString(); 
         if (x != "Sheet1$_" && x != "Sheet2$_" && x != "Sheet3$_" && x != "Sheet4$_" && x != "Sheet5$_") 
         { 
          excelSheets[t] = row["TABLE_NAME"].ToString(); 
          t++; 
         } 
        } 
        OleDbConnection excelConnection1 = new OleDbConnection(excelConnectionString); 

        int totalsheet = excelSheets.Length; 
        for (int i = 0; i < totalsheet; i++) 
        { 
         string query = string.Format("Select * from [{0}]", excelSheets[i]); 
         using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, excelConnection1)) 
         { 
          dataAdapter.Fill(ds); 
         } 
        } 
       } 
       if (fileExtension.ToString().ToLower().Equals(".xml")) 
       { 
        string fileLocation = Server.MapPath("~/Content/") + Request.Files["FileUpload"].FileName; 
        if (System.IO.File.Exists(fileLocation)) 
        { 
         System.IO.File.Delete(fileLocation); 
        } 

        Request.Files["FileUpload"].SaveAs(fileLocation); 
        XmlTextReader xmlreader = new XmlTextReader(fileLocation); 
        // DataSet ds = new DataSet(); 
        ds.ReadXml(xmlreader); 
        xmlreader.Close(); 
       } 

任意の提案?

ソフトウェアをインストールせずに誰でも私にどのタイプの.dllファイルをbinフォルダに置く必要があるのですか?

答えて

-1

oledbだけを心配する必要はありません。他の多くの方法が.xlsxファイル(インポート)をアップロードするために使用されています。ここ

はヘッダである:

using ClosedXML.Excel; 

がnugetからClosedXML.Excel DLLをインストールします。ここで

はコードです:

string filePath = Server.MapPath("~/Content/MailMarketing/") + Path.GetFileName(flexcel.PostedFile.FileName); 
     flexcel.SaveAs(filePath); 

     //Open the Excel file using ClosedXML. 
     using (XLWorkbook workBook = new XLWorkbook(filePath)) 
     { 
      //Read the first Sheet from Excel file. 
      IXLWorksheet workSheet = workBook.Worksheet(1); 

      //Create a new DataTable. 
      DataTable dt = new DataTable(); 

      //Loop through the Worksheet rows. 
      bool firstRow = true; 
      foreach (IXLRow row in workSheet.Rows()) 
      { 
       //Use the first row to add columns to DataTable. 
       if (firstRow) 
       { 
        foreach (IXLCell cell in row.Cells()) 
        { 
         dt.Columns.Add(cell.Value.ToString()); 
        } 
        firstRow = false; 
       } 
       else 
       { 
        //Add rows to DataTable. 
        dt.Rows.Add(); 
        int i = 0; 
        foreach (IXLCell cell in row.Cells()) 
        { 
         dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString(); 
         i++; 
        } 
       } 
} 
関連する問題