2010-05-04 92 views
0

我有連接開行代碼得到這個錯誤,而讀的Excel

string conn = @"Provider=Microsoft.ACE.OLEDB.12.0;DSN=Excel Files;DBQ=" + strSheetPath + @";DriverId=1046;FIL=excel 12.0;MaxBufferSize=2048;PageTimeout=5;"; 
//string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strSheetPath +";Extended Properties=Excel 12.0 Xml;HDR=YES;IMEX=1"; 
string destinationConnectionString = ConfigurationManager.ConnectionStrings["KGD6DBConnectionString"].ConnectionString; 
string query = "Select * From [Sheet1$]"; 

using (var myConnection = new OleDbConnection(conn)) 
using (var destinationConnection = new SqlConnection(destinationConnectionString)) 
using (var bulkCopy = new SqlBulkCopy(destinationConnection)) 
{ 
    //Map first column in source to second column in sql table (skipping the ID column). 
    //Excel schema[CompanyName,Phone] Table schema[ShipperID, CompanyName, Phone] 
    bulkCopy.ColumnMappings.Add(0, 1); 
    bulkCopy.ColumnMappings.Add(1, 2); 
    bulkCopy.ColumnMappings.Add(2, 3); 
    bulkCopy.ColumnMappings.Add(3, 4); 
    bulkCopy.ColumnMappings.Add(4, 5); 
    bulkCopy.ColumnMappings.Add(5, 6); 
    bulkCopy.ColumnMappings.Add(6, 7); 
    bulkCopy.ColumnMappings.Add(7, 8); 
    bulkCopy.ColumnMappings.Add(8, 9); 
    bulkCopy.ColumnMappings.Add(9, 10); 
    bulkCopy.ColumnMappings.Add(10, 11); 
    bulkCopy.ColumnMappings.Add(11, 12); 
    bulkCopy.ColumnMappings.Add(12, 13); 
    bulkCopy.ColumnMappings.Add(13, 14); 
    bulkCopy.ColumnMappings.Add(14, 15); 
    bulkCopy.ColumnMappings.Add(15, 16); 
    bulkCopy.ColumnMappings.Add(16, 17); 
    bulkCopy.ColumnMappings.Add(17, 18); 
    bulkCopy.ColumnMappings.Add(18, 19); 
    bulkCopy.ColumnMappings.Add(19, 20); 
    bulkCopy.ColumnMappings.Add(20, 21); 
    bulkCopy.ColumnMappings.Add(21, 22); 
    bulkCopy.ColumnMappings.Add(22, 23); 
    bulkCopy.ColumnMappings.Add(23, 24); 

    bulkCopy.DestinationTableName = "dbo.sampleInventory"; 

    using (var myCommand = new OleDbCommand(query, myConnection)) 
    { 
     myConnection.Open(); 
     destinationConnection.Open(); 

     var myReader = myCommand.ExecuteReader(); 
     while (myReader.Read()) 
     { 
      bulkCopy.WriteToServer(myReader); 
     } 
    } 
} 
return (new DataTable()); 

得到錯誤。

錯誤: 找不到可安裝的ISAM。

+1

您沒有錯誤;你有一個例外。在整個事情上放一個try/catch塊;然後在catch塊中,獲取ex.ToString()的值並在此處發佈。 – 2010-05-04 11:23:02

+0

這是我得到的同一條線。當我嘗試捕捉內部異常,然後它給我對象引用null異常。 – 2010-05-04 12:06:16

回答

0

確保你正在構建32位應用程序,否則不應該工作,因爲Microsoft.ACE.OLEDB.12.0僅適用於x86平臺

如果這不利於轉到http://support.microsoft.com/kb/209805

+0

好吧,但我怎麼知道我正在構建32位應用程序?步驟請 – 2010-05-04 12:42:19

+0

對於C#項目,您可以在構建選項卡下的項目屬性對話框中找到該選項。對於VB.net項目,該設置位於Advanced Compiler Settings對話框中,該對話框通過項目屬性的Compile選項卡上的Advanced Compile Options按鈕提供。可用選項的列表是: 1.任何CPU 2. 86 3. 64 如果你想看到所有可用的「處理器架構」下載以下擴展名: http://visualstudiogallery.msdn.microsoft .com/en-us/36a6eb45-a7b1-47c3-9e85-09f0aef6e879 – 2010-05-04 13:03:08

0

它看起來可能是組件,它允許Excel數據在數據庫缺失或在您的計算機上註冊不正確時被查詢。

在此鏈接中有一些說明可能有所幫助:http://support.microsoft.com/kb/209805

+0

我試過了,不適合我 – 2010-05-04 12:40:48