System.Runtime.InteropServices.SEHException: 'Внешний компонент выдал исключение.' когда я использую OleDbDataAdapter - PullRequest
0 голосов
/ 11 февраля 2020

enter image description here Это мой код. И я использую VS2017, AccessDatabaseEngine 32 бит.

[HttpPost]
public JsonResult GetConditionOfDisease(string inputString)
{
    var adapter = new OleDbDataAdapter("select * from [history$]", connectionString);
    var ds = new DataSet();
    adapter.Fill(ds, "CompetitorAsset");
    System.Data.DataTable data = ds.Tables["CompetitorAsset"];
    List<string> conditionOfDisease = data.AsEnumerable().Select(r => r.Field<string>("F5")).ToList();
    conditionOfDisease.RemoveAt(0);
    var distinctConditionOfDisease = conditionOfDisease.Distinct().ToList();
    var matchConditionOfDisease = distinctConditionOfDisease.Where(s => s != null && s.Trim().ToLower().Contains(inputString.Trim().ToLower())).ToList();
    return Json(matchConditionOfDisease);
}

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

вижу в документации. Класс OleDbDataAdapter не перегружает метод Fill, как насчет вас.

У него есть два метода заполнения при перегрузке:

public int Fill(DataTable dataTable, object ADODBRecordSet);
public int Fill(DataSet dataSet, object ADODBRecordSet, string srcTable);

Ваше использование:

adapter.Fill(ds, "CompetitorAsset"); 

Используйте перегрузки, которые я указал вам. Обратите внимание на DataTable DataSet, не смешивайте, удачи!

0 голосов
/ 11 февраля 2020

enter image description here Попробуйте переписать так, чтобы

[HttpPost]
    public JsonResult GetConditionOfDisease(string inputString)
    {
        var ds = new DataSet();
        using (var adapter = new OleDbDataAdapter("select * from [history$]", connectionString))
        {               
            adapter.Fill(ds, "CompetitorAsset");
        }
        System.Data.DataTable data = ds.Tables["CompetitorAsset"];
        List<string> conditionOfDisease = data.AsEnumerable().Select(r => r.Field<string>("F5")).ToList();
        conditionOfDisease.RemoveAt(0);
        var distinctConditionOfDisease = conditionOfDisease.Distinct().ToList();
        var matchConditionOfDisease = distinctConditionOfDisease.Where(s => s != null && s.Trim().ToLower().Contains(inputString.Trim().ToLower())).ToList();
        return Json(matchConditionOfDisease);
    }

Использовать с имплементацией объектов IDisposable interface

...