2013-07-09 122 views
0

我已經創建了一個演示,用於將Excel文件上傳到網絡服務器,然後將數據從它複製到SQL服務器數據庫。它工作完美。從excel傳輸數據到SQL

ASPX設計:

<table> 
      <tr> 
       <td> 
        <span style="color: Red">*</span>Attach Excel file 
       </td> 
       <td> 
        <asp:FileUpload ID="fileuploadExcel" runat="server" /> 
       </td> 
      </tr> 
      <tr> 
       <td></td> 
       <td> 
        <asp:Button ID="btnSend" runat="server" Text="Export" onclick="btnSend_Click" /> 
       </td> 
</tr> 
</table> 

後面的代碼:

private String strConnection = "Data Source=Test-PC;Initial Catalog=ExcelMapping;User ID=Test;Password=Test"; 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 
     protected void btnSend_Click(object sender, EventArgs e) 
     { 
      //file upload path 
      string path = fileuploadExcel.PostedFile.FileName; 
      fileuploadExcel.SaveAs(Server.MapPath(path)); 
      //Create connection string to Excel work book 
      string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(path) + ";Extended Properties=Excel 12.0;Persist Security Info=False"; 
      //Create Connection to Excel work book 
      OleDbConnection excelConnection = new OleDbConnection(excelConnectionString); 
      //Create OleDbCommand to fetch data from Excel 
      OleDbCommand cmd = new OleDbCommand("Select [lat],[long] from [Sheet1$]", excelConnection); 
      excelConnection.Open(); 
      OleDbDataReader dReader; 
      dReader = cmd.ExecuteReader(); 
      DataSet ds = new DataSet(); 

      SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection); 
      //Give your Destination table name 
      sqlBulk.DestinationTableName = "Test"; 
      sqlBulk.ColumnMappings.Add(0, 1); 
      sqlBulk.ColumnMappings.Add(1, 2); 
      sqlBulk.WriteToServer(dReader); 
      excelConnection.Close(); 
     } 
    } 

但是,當我使用相同的代碼在現有的應用程序。它給我的錯誤,同時打開與Excel陳述

的「Microsoft.ACE.OLEDB.12.0」供應商未在本地機器上註冊的連接

請建議我做什麼來解決這個。

+0

你說,你有一個樣品溶液的工作同一臺機器? – nunespascal

+0

您是否嘗試過使用ODBC數據源管理器添加該提供程序? – rajeemcariazo

+0

@nunespascal是演示在同一臺機器上工作。 –

回答

1

我曾經遇到過這個問題。我按照這些步驟:

只要按照步驟操作:

  1. 右鍵單擊解決方案文件在Solution Explorer

  2. 單擊配置管理器。

  3. 單擊主動平臺下拉菜單,如果x86已經存在,選擇該選項,否則單擊新建。

  4. 來自新平臺的下拉

  5. 編譯選擇x86並運行應用程序。

您可以按照THIS鏈接一步一步的圖示。

1

當你的應用程序的位數不一樣的安裝ACE.OLEDB提供商,通常發生在64位系統

例如上會出現此消息,您編譯AnyCPU平臺,然後在運行你的應用程序一個64位系統。在這種情況下,您的應用程序以64位代碼運行,但64位代碼不能使用32位驅動程序。如果在你的目標系統上有一個32位的ACE.OLEDB,你會得到這個消息。當然這也是相反的。您的應用程序是x86編譯的,但ACE.OleDb是64位。 (不,你不能同時安裝32位和64位版本的提供商)

當然,我假設的驅動程序已安裝,如果不是,你可以從Microsoft Access Database Engine頁面下載它們,但要記住他們應該與安裝的Microsoft Office具有相同的位數。這是一個大問題。如果您安裝了32位版本的Office,則需要32位版本的數據庫引擎。這意味着您需要爲x86編譯應用程序,或者需要安裝64位版本的Microsoft Office。

+0

我的應用程序是64位編譯的。我在win 7 64位上運行它。並建立設置爲「任何CPU」 –

+0

您是否安裝了32位版本的Office? – Steve

+0

omg ..是的辦公室是32位。我在哪裏可以得到64位驅動程序? –

1

您需要安裝Office System Driver: Data Connectivity Components

這是一個32位組件。所以你需要將你的平臺設置爲x86。

+0

我不能將其切換到32位..我運行這個應用程序贏7 64位。如果我在應用程序停止工作時將它構建爲32位的其他組件。 –

0

試試這個

不OLEDB ..Very簡單的代碼

refrence:exceldatareader.codeplex.com/

下載DLL並添加refrence

FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); 

//1. Reading from a binary Excel file ('97-2003 format; *.xls) 
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
//... 
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
//... 
//3. DataSet - The result of each spreadsheet will be created in the result.Tables 
DataSet result = excelReader.AsDataSet(); 
//... 
//4. DataSet - Create column names from first row 
excelReader.IsFirstRowAsColumnNames = true; 
DataSet result = excelReader.AsDataSet(); 

//5. Data Reader methods 
while (excelReader.Read()) 
{ 
    //excelReader.GetInt32(0); 
} 

//6. Free resources (IExcelDataReader is IDisposable) 
excelReader.Close(); 
+0

謝謝,我會試試看。 –

+0

它也給我同樣的錯誤。 –

相關問題