Error connecting to SQLite database in Windows Phone 8.1 application - sqlite

I'm developing application by using Xamarin Forms. I need database so I install sqlite-net-pcl by Frank A.Krueger via NuGet package manager. I try to get connection in PCL project:
ISQLiteHelper sqlLiteHelper = DependencyService.Get<ISQLiteHelper>();
string pathToDatabaseFile = sqlLiteHelper.GetLocalDatabaseFilePath(databaseFilename);
this.database = new SQLiteConnection(pathToDatabaseFile);
But I got an exception.
"Unable to load DLL 'e_sqlite3': The specified module could not be
found. (Exception from HRESULT: 0x8007007E)"
I followed by some answers and download and installed sqlite-wp81-winrt-3180000.vsix Than I added the following references into my WinPhone 8.1 project: Reference Manager -> Windows Phone 8.1 -> Extensions -> SQLite for Windows 8.1 But it did not help me. I got the same error.
I changed my target platform to x86. For Any CPU I get an error:
"Any CPU" is not supported by the referenced SDK "Microsoft.VCLibs,
Version=12.0". Please consider changing the targeted processor
architecture of your project (in Visual Studio this can be done
through the Configuration Manager) to one of the architectures
supported by the SDK: "x86, ARM". App1.WinPhone
I got that error if I change my target platform to x64 like my PC has.
"X64" is not supported by the referenced SDK "Microsoft.VCLibs,
Version=12.0". Please consider changing the targeted processor
architecture of your project (in Visual Studio this can be done
through the Configuration Manager) to one of the architectures
supported by the SDK: "x86, ARM". App1.WinPhone
"X64" is not supported by the referenced SDK "SQLite.WP81,
Version=3.18.0". Please consider changing the targeted processor
architecture of your project (in Visual Studio this can be done
through the Configuration Manager) to one of the architectures
supported by the SDK: "x86, ARM". App1.WinPhone

SOLUTION: You can use SQLite.Net-PCL by Oustein Krog, Frank Krueger, Tim Heuer instead of sqlite-net-pcl.
The creation of collection will look like this one:
this.database = new SQLiteConnection(databaseFilename);

Related

Unable to load DLL 'SQLite.Interop.dll' on Visual Studio 2017 for UWP project

I get this error when using SQLite.
DllNotFoundException: Unable to load DLL 'SQLite.Interop.dll': The
specified module could not be found. (Exception from HRESULT:
0x8007007E)
I tried several solution without success.
Tried using x86/x64
Tried this:
Visual Studio 2017 Xamarin UWP break, unable to load "sqlite3"
Added 2015 Visual C++ runtime dependency for UWP.
Tried manually adding the .dll and set it to "copy always".
Tried installing locally depedencies from here
I'm really out of ideas.
I had this problem running in release but not in debug.
I am using VS2017 15.9.5
Using Release manager I changed all the projects to use Release x64
Strangely the Platform tab asked me to make a new Platform and I had to do this in order to be able to pick an x64 platform
I wound up installing the SQLite modules in all the projects, not just the data tier. it would not work with just the data tier, even though I had Copy local true.
Here are the nuget packages I used

Unable to load DLL 'sqlite3' - for Windows Universal Mobile

I used Visual Studio 2015 with SP2. I try created Windows Universal app with sqlite. I added SQLite for Unversal Windows Platforms and SQLite.Net-PCl. It is my simple code
var conn = new SQLiteConnection(
new SQLitePlatformWinRT(),
Path.Combine(ApplicationData.Current.LocalFolder.Path, "Storage.sqlite"));
It is working for desktop. But it is not work for mobile(in device and emulator). I get this exception System.DllNotFoundException:
HResult=-2146233052
Message=Unable to load DLL 'sqlite3': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
Source=SQLite.Net.Platform.WinRT
TypeName=""
StackTrace:
at SQLite.Net.Platform.WinRT.SQLite3.SetDirectory(UInt32 directoryType, String directoryPath)
at SQLite.Net.Platform.WinRT.SQLiteApiWinRT..ctor()
at SQLite.Net.Platform.WinRT.SQLitePlatformWinRT..ctor()
at AppDbTest.MainPage.DbConnection()
at AppDbTest.MainPage..ctor()
at AppDbTest.AppDbTest_XamlTypeInfo.XamlTypeInfoProvider.Activate_0_MainPage()
at AppDbTest.AppDbTest_XamlTypeInfo.XamlUserType.ActivateInstance()
I try this method. I reinstall SQLite for Unversal Windows Platforms extension and SQLite.Net-PCl. I created clear project. But it does not work for me.
I add a reference to Visual C++ 2015 Runtime for Universal Windows Platform Apps. It is work for me. I used SQLite for Universal Windows Platform.
Make sure that you current add 2 references
Sqlite for Universal Windows Platfrom
Visual C++ Runtime 2015 for Unversal Windows Platfrom
It's still worked!
Solved in chat.
OP solved it using Nuget console :
Install-Package SQLite.WinRT.UAP
and used "add link" ->"Extensions"->SQLite for Windows Runtime
Suggestion
Cool but would suggest you to use Extension SQLite for Universal App Platform as it encases most of device family and SQLite.WinRT.UAP is not needed.
As in current repo I removed references for Winrt and using these extensions its working fine. Just check if the Sqlite vsix package installed is the correct one on your system.

Could not find SDK SQLite.WP80 Xamarin and Azure build error

I am building an Azure app with Xamarin.Forms in Visual Studio 2015. My app is happily using both "Azure Mobile Services SQLiteStore" and "Windows Azure Mobile Services" in the Android and iOS builds. However, I am trying to get the same to build and run on WinPhone with little luck. I have tried various things, but typically end up with the following error:
Could not find SDK "SQLite.WP80, version=3.8.7.2". C:\Program Files
(x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets 1886
5 MyApp.WinPhone
Does anybody have a reliable set of instructions for getting Azure Mobile Services SQLiteStore operational on WinPhone 8.0 ?
In my case I had 2 problems
The reference to the SQLite for Windows Phone was missed in the WindowPhone App
As InitLipton said it's necessary to install SQLite for Windows Runtime depended on the windows phone version you are using (In my case was WP Runtime 8)
here are links of the runtime SDKs
WP Runtime 8
Windows Runtime 8.1

Build Problems with SQLite-WinRT Wrapper

I am having trouble getting my app to build for ARM target after adding the SQLite-WinRT database wrapper. I could reproduce this with a simple test app as follows:
(This is done in Visual Studio 2013.)
Create an empty Windows 8.1 universal app (WinRT)
Download SQLite for Windows Phone 8.1 and SQLite for Windows Runtime (Windows 8.1) using Tools/Extensions and Updates. Add them to the respective projects' references.
Using NuGet, add SQLite-WinRT package to each project.
Build for x86 (local machine or phone emulator) -> no problems.
Build for ARM (phone device) -> build error shown below (independent of debug or release builds).
There was a mismatch between the processor architecture of the project being built "ARM" and the processor architecture, "x86", of the implementation file "C:\Users\jr\Documents\Visual Studio 2015\Projects\sqlite-test\packages\Sqlite-Winrt.3.8.7.1\lib\wpa81\SQLiteWinRT.dll" for "C:\Users\jr\Documents\Visual Studio 2015\Projects\sqlite-test\packages\Sqlite-Winrt.3.8.7.1\lib\wpa81\SQLiteWinRT.winmd". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and implementation file, or choose a winmd file with an implementation file that has a processor architecture which matches the targeted processor architecture of your project.
I posted a small test project here (Windows Phone 8.1 empty project, added SQLite, added SQLite-WinRT via NuGet).
Go to project properties open build tab and set target platform to ARM
Edit
You have added WinRt sqlite. it is buid on x86 and when you want to build it on ARM process Architecture it cannot build you need to remove WinRTSQlite dll than your project will work fine. Here is Code
Hope this helps
One workaround for the problems with the NuGet package is adding the sqlite-winrt sources to your phone or universal app.
install SQLite for Windows Phone 8.1 (and for universal also Windows Runtime (Windows 8.1)) in Tools -> Extensions and Updates if not done already
add references to the respective projects
download the sources for the sqlite-winrt wrapper
copy the SQLiteWinRTPhone81(RT) (and SQLiteWinRT81 if needed) folders to your solution
add the projects to your solution in Visual Studio (right-click on solution -> Add -> Existing Project)
add references to the respective projects
edit the references for the sqlite-winrt project(s) to point to the correct version of SQLite (right-click project -> Properties -> Common Porperties -> References): add a reference to the current SQLite version in your project and remove the old reference
build your solution
I have downloaded your project and on the references i have found that you are using SQLite-WinRT and sqlite for windows phone 8.1, you don't need both.
as soon as you remove SQLite-WinRT your project start compiling.
EDIT:
inside a universal app you have to add only the right references, if is a phone project just add sqlite for windows phone 8.1, instead on the windows 8.1 app add only the SQLite-WinRT

Using SQLite-Net Extensions in winRT

I would like to use the SQLite-Net Extensions library in my winRT project.
https://bitbucket.org/twincoders/sqlite-net-extensions
To support sqlite in my Windows 8.1 App I've currently installed SQLite for Windows Runtime (Windows 8.1) as VS Extension and sqlite-net via NuGet.
Extension: http://visualstudiogallery.msdn.microsoft.com/1d04f82f-2fe9-4727-a2f9-a2db127ddc9a
sqlite: https://www.nuget.org/packages/sqlite-net
To get it working I tried to download the source and build it with the sqlite libs we can use for winRT. In order to add a reference to SQLite for Windows Runtime I need to change the target to Windows 8.1 only. Doing that will result in many errors like: "The name 'BindingsFlags' does not exist in the current context" "Instance argument: cannot convert from 'System.Type' to 'System.Reflection.MemberInfo'"
I've also tried to link the SQLite-Net-PCL directly from my project but in the end it's the same situation.
I really need to add relationships to my sqlite database and would be very very thankful for every help I can get!
Attached you can find a screenshot of my VS2013 where I've changed the references of SQLiteNetExtensions to use the required winRT libraries.
Many many thanks in advance for any help you can give me!
Following steps work for me without the need to download the source and possible compilation error:
(I have the following assumptions: I only target Windows 8.1 [As of yours] and I use Visual Studio Premium 2013 Update 3)
In Visual Studio go to Tools-Extensions & updates-online section and look for sqlite. This package will contain
required SQLite Binaries.
Add a Reference to SQLite for Windows Run-time in your project Reference
Add a Reference to Microsoft Visual C++ Run-time package
In Nuget package manager console run "Install-package sqlite-net"
In Nuget package manager console run "Install-Package SQLiteNetExtensions"
Now you will have a project which Targets Windows 8.1 and also has reference to both SQLiteNetExtensions. Above steps was originally recommended in : Using SQLite in a Windows Store App
Below is the screenshot of the SQLiteDemo project references downloaded from the link I mentioned earlier which also has reference to SQLiteNetExtensions :

Resources