2010-05-04 94 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