填充数据适配器时出现奇怪的错误

时间:2010-03-26 01:31:52

标签: c# .net visual-studio-2008 memory

当我尝试连接到Excel工作表并使用查询结果填充OleDbDataAdapter时,我的代码(c#,。Net 3.5,VS2008)中收到以下错误。首先是错误:

  

尝试读取或写入受保护的内存。这通常是一个   表明其他记忆是   损坏。

这是代码,老实说非常简单:

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优化,但这似乎没有帮助。非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

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

而不是:

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

你应该:

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

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