Странная ошибка при заполнении адаптера данных - PullRequest
0 голосов
/ 26 марта 2010

Я получаю следующую ошибку в своем коде (c #, .Net 3.5, VS2008), когда я пытаюсь подключиться к листу Excel и заполнить OleDbDataAdapter результатами запроса. Сначала ошибка:

Попытка чтения или записи в защищенную память. Это часто признак того, что другая память коррумпированы.

А вот код, который, честно говоря, довольно прост:

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");. Я нашел сообщение на форуме Microsoft о том, что в VS2008 нужно включить оптимизацию JIT из меню Инструменты / Параметры / Отладка / Общее, но это, похоже, не помогло. Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 26 марта 2010

Похоже, что ошибка генерируется из провайдера ACE. Я предполагаю, что это потому, что ваша строка подключения неверна.

Вместо:

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

Вы должны иметь:

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

Обратите внимание на обратную косую черту вместо прямой. Вам нужен символ @ спереди, чтобы избежать экранирования от обратной косой черты. Вам также не нужен string.Format - вы ничего не форматируете в этой строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...