0

enter image description hereThis is my code. And I am using VS2017, AccessDatabaseEngine 32 bit.

[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);
}
Kishan
  • 13
  • 2
  • 8
  • Which line of code threw the exception? – mjwills Feb 11 '20 at 09:54
  • adapter.Fill(ds, "CompetitorAsset");/// getting exception here – Kishan Feb 11 '20 at 10:17
  • Maybe it is related to Microsoft Access Database Engine. For more information, you can refer to [OleDbConnection gets “External component has thrown an exception.”](https://stackoverflow.com/questions/35701585/oledbconnection-gets-external-component-has-thrown-an-exception). – Jack J Jun Feb 12 '20 at 09:12
  • Not helpful.... – Kishan Feb 13 '20 at 06:54

2 Answers2

0

enter image description hereTry to rewrite so as

[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);
    }

Use using with objects impimentation IDisposable interface

Kishan
  • 13
  • 2
  • 8
philomelka
  • 41
  • 6
0

I see in documentation. Class OleDbDataAdapter haven't overloads Fill method how about you.

He has two overload fill method:

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

Your use:

adapter.Fill(ds, "CompetitorAsset"); 

Use overloads wihich I pointed out you. Pay attention to DataTable DataSet, do not mix, Good luck!

philomelka
  • 41
  • 6