2013-07-09 6 views
0

Я создал демо для загрузки файла Excel на веб-сервер, а затем скопировал данные из него на SQL-сервер db. Он работает отлично.Передача данных из 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 Data Source Administrator для добавления этого провайдера? – rajeemcariazo

+0

@nunespascal да демонстрация работает на одной машине. –

ответ

1

Я столкнулся с этой проблемой один раз. Я последовал за следующие действия:

Просто следуйте инструкциям:

  1. правой кнопкой мыши на файле решения в обозревателе решений

  2. Нажмите на Configuration Manager.

  3. Нажмите на активную платформу. Выбросьте, если x86 уже существует, выберите это, а затем нажмите «Создать».

  4. Выберите x86 из новой платформы выпадающего списка

  5. Скомпилировать и запустить приложение.

Вы можете следить за 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-битная версия Database Engine. Это означает, что вам нужно иметь приложение, скомпилированное для x86, или вам нужно установить 64-разрядную версию Microsoft Office.

+0

мое приложение составлено из 64 бит. Я запускаю его на win 7 64 бит. и для сборки установлено значение «Любой процессор» –

+0

У вас установлена ​​32-битная версия Office? – Steve

+0

omg .. есть офис 32 бит. Где я могу получить 64-битные драйверы? –

1

Вы должны иметь Office System Driver: Data Connectivity Components установлены.

Это 32-разрядный компонент. Поэтому вам нужно установить платформу на x86.

+0

Я не могу переключить его на 32-битный. Я запускаю это приложение на win 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

также дает мне такую ​​же ошибку. –

Смежные вопросы