Why am I getting "Unable to load DLL 'sqlite3'" in my WPF app?

B. Clay Shannon-B. Crow Raven picture B. Clay Shannon-B. Crow Raven · Dec 6, 2014 · Viewed 10.3k times · Source

I added what I thought were the necessary SQLite (and sqlite-net) packages to my app. On running it, though, I get an exception:

System.DllNotFoundException was unhandled by user code HResult=-2146233052 Message=Unable to load DLL 'sqlite3': The specified module could not be found. (Exception from

I have the following SQLite packages installed:

enter image description here

What is missing?

UPDATE

I tried ajawad987's suggestion, but still get the same runtime error, even though I've got this:

enter image description here

...and this:

enter image description here

UPDATE 2

Where this runtime exception takes place (in SQLite.cs) seems odd to me:

if SILVERLIGHT || USE_CSHARP_SQLITE

        var r = SQLite3.Open (databasePath, out handle, (int)openFlags, IntPtr.Zero);

else

        // open using the byte[]
        // in the case where the path may include Unicode
        // force open to using UTF-8 using sqlite3_open_v2
        var databasePathAsBytes = GetNullTerminatedUtf8 (DatabasePath);
        var r = SQLite3.Open (databasePathAsBytes, out handle, (int) openFlags, IntPtr.Zero);

endif

But I am using C#, so why is the line that's failing even running? (it fails in the "else" block)?

Answer

ajawad987 picture ajawad987 · Dec 6, 2014

Is your project build set to Any CPU? You'll need to set it to either x86 or x64 for SQLite3. The x86 route will yield more compatibility across devices, so I recommend that option unless your doing some specific 64-bit stuff.

Edit: You'll also need to download the actual Sqlite DLL manually from Sqlite's main site. The file you want is named sqlite-dll-win32-x86-3080702.zip. Extract the DLL from that ZIP and add it to your project as a content file. Set the copy to output directory option in the properties tool window to Copy Always, and rebuild. Also ensure that your project is set to the x86 option as mentioned above.

This should hopefully do the trick... its been a while since I've used Sqlite in a .NET application.

Side Notes: The Nuget package you downloaded actually only contains the C# wrapper library around the real Sqlite DLL.