当我尝试连接到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优化,但这似乎没有帮助。非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
该错误似乎是从ACE提供程序中生成的。我的猜测是因为你的连接字符串错了。
而不是:
var excelFileName = "c:/Metadata_Tool.xlsm";
你应该:
var excelFileName = @"c:\Metadata_Tool.xlsm";
注意反斜杠而不是正斜杠。您需要前面的@
字符以防止反斜杠被转义。您根本不需要string.Format
- 您没有格式化此行。