Simple.Data “No ADO Provider Found”

Whilst trying to get Simple.Data working with a teeeeny tiny app for work, I couldn’t get past Database.OpenConnection(…) ; each time would result in a “No ADO Provider Found” exception, which had me baffled.

Google wasn’t helping much as it just threw up the symbolsource copy of Simple.Data’s MEFHelper.cs – i.e., the exception itself.

With a bit more digging I found this post on the Google Groups board which looked hopeful.

Eventually I found out that I needed to Nuget (if I can use that as a verb) Simple.Data into whichever projects referenced the class library that uses Simple.Data.

Odd. Seems a bit unnecessary, but it works now so I’m not complaining.

8 thoughts on “Simple.Data “No ADO Provider Found”

  1. I had a similar error but fixed it another way. For me the issue was that all the Simple.Data dlls were not getting copied from my data project to my web project.

    It turns out this is a bug in Visual Studio 2010 and 2012 (http://stackoverflow.com/a/8213977/29).

    In your data project, find the references to simple data (I had three–simple data, ado, and sql server). Toggle copy local to false. Save All. Toggle copy local to true. Save all.

    That should fix it (see the SO post for details).

    • Errrr.. actually that didn’t work for me afterall. 🙁

      I’m going with the group here by just adding a ref to simple.data on my main project, too, until the numerous MS Connect bugs related to this are addressed.

  2. Thanks for posting this! It saved me some serious grief.

    Still, this is a pretty bad state of affairs. I wanted to write a class library (.dll) that wrapped Simple.Data and used it to call PostgreSQL. It seems the only way to make this work is to include…

    Npgsql
    Simple.Data
    Simple.Data.Ado
    Simple.Data.PostgreSql

    … in my application itself (so, in the project that calls my class library). AND then I need to include at least…

    Simple.Data

    In the class library itself (I’ll probably need to add the others too, but I already have to have Simple.Data referenced in at least two places just to hit the database). So much for separation of concerns!!

    If anyone else needs to do this, you can do it (as suggested) by running NuGet on EACH of your projects, but NOTE: NuGet repos are not up to date!!

    So, you’ll likely need to Install-Package each of the above assemblies in order to get the latest version (otherwise you’ll get reflection/unknown Type errors).

    If (like me) this bothers you, you can (after getting the latest NuGet versions) copy the .dlls out of their NuGet locations, Uninstall-Package on them, and then reference the .dll’s directly; however, there will be one more surprise waiting for you. You STILL won’t be able to find an ADO provider until you include this in your app.config (again, this is application level, I don’t know of any way to do this within a library):

    So, as far as setup is concerned, it’s anything but “Simple.” Good luck!

    • I guess I may not be able to post XML into the comment, so, look for the config files you get when you use NuGet, you’re looking for something like this:

      configuration
      runtime
      assemblyBinding xmlns=”urn:schemas-microsoft-com:asm.v1″
      dependentAssembly
      assemblyIdentity name=”Npgsql” publicKeyToken=”5d8b90d52f46fda7″ culture=”neutral”
      bindingRedirect oldVersion=”0.0.0.0-2.0.14.3″ newVersion=”2.0.14.3″

      That information will have to be in the app.config alongside your executable (putting it with your class library will not work).

  3. I solved same problem with adding references from packages
    Simple.Data 0.19.0.0
    Simple.Data.Ado 0.19.0.0
    Simple.Data.Sqlite 0.18.3.2

  4. Just wanted to let you know this post is still helping people! It’s a bit rubbish having to do this to fix the problem, but it’s solved it for me. Adam

Leave a Reply

Your email address will not be published. Required fields are marked *