2010-03-26 188 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