2010-03-26 63 views
0

当我尝试连接到Excel工作表并使用查询结果填充OleDbDataAdapter时,我在代码(c#,.Net 3.5,VS2008)中收到以下错误。首先,错误:填充数据适配器时出现奇怪的错误

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

这里是代码,这是诚实很简单:

var excelFileName = @"c:\Metadata_Tool.xlsm"; 
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties=Excel 12.0;HDR=YES;", excelFileName); 

var adapter = new OleDbDataAdapter("Select * FROM [Video Tagging XML]", connectionString); 
var ds = new DataSet(); 

adapter.Fill(ds, "VTX"); 

DataTable data = ds.Tables["VTX"]; 

foreach (DataRow myRow in data.Rows) 
{ 
    foreach (DataColumn myColumn in data.Columns) 
    { 
     Console.Write("\t{0}", myRow[myColumn]); 
    } 
    Console.WriteLine(); 
} 

Console.ReadLine(); 

我上线adapter.Fill(ds,"VTX");错误。我确实找到了一个微软论坛帖子,声称可以在Tools/Options/Debug/General菜单中打开VS2008中的JIT优化,但这似乎没有帮助。任何帮助将不胜感激,谢谢!

回答

2

该错误似乎是从ACE提供程序中生成的。我的猜测是,这是因为你的连接字符串是错误的。

相反的:

var excelFileName = "c:/Metadata_Tool.xlsm"; 

你应该有:

var excelFileName = @"c:\Metadata_Tool.xlsm"; 

注意反斜杠而不是正斜杠。您需要前面的@字符以防止反斜杠被转义。您也根本不需要string.Format - 您没有格式化此行的任何内容。

+0

我给了这个尝试,虽然你是正确的格式,不幸的是,并没有解决问题。我收到了同样的错误。 – 2010-03-26 13:45:14

+0

@Tim C:你确定这个文件在吗?是否应用了正确的权限?你有没有尝试在Excel中打开它?你是否在一个只有几行的手工创建的全新空白Excel文件上尝试了相同的代码? – Aaronaught 2010-03-26 13:59:22

+0

它似乎与Excel文件!该文件位于正确的位置并具有所有权限,但是当我更改为另一个文件时,它工作正常。这件事有些腐败。谢谢! – 2010-03-26 21:00:00