我正在尝试实现SQLite的一个令人难以置信的基本用法。我有一个Button
和一个EditText
。我想存储EditText
OnClick
的内容。
我跟着这个:https://developer.xamarin.com/guides/android/application_fundamentals/data/part_3_using_sqlite_orm/
和https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/databases/
我无法通过以下启动代码而不会得到后续错误:var db = new SQLiteConnection (dbPath);
错误:
'SQLite.SQLiteConnection'的类型初始值设定项引发了异常。
内在例外:
System.Exception:这是'诱饵'。您可能需要将一个SQLitePCLRaw.bundle_ * nuget包添加到您的平台项目中。 at SQLitePCL.Batteries_V2.Init()[0x00000] in <9baed10c674b49e0b16322f238b8ecc1>:0 in SQLite.SQLiteConnection..cctor()[0x00000] in /Users/vagrant/git/src/SQLite.cs:169}
我已经在PCL和Android项目上安装了NuGet包。我看到安装了以下软件包:
SQLitePCLRaw.provider.e_sqlite3.android
SQLitePCLRaw.lib.e_sqlite3.android
我试过安装:
SQLitePCLRaw.bundle_e_sqlite3
如前所述,代码是最基本的实现:
try
{
string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "TestDB-DEV.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<PersonName>();
}
我花了几天时间在这上面尝试了许多资源,例如:https://forums.xamarin.com/discussion/87289/sqlite-net-pcl-bait-issue但最终没有成功。
不幸的是,像“它只是工作”,“不确定我做了什么”,“清洁/重建”等废话是我见过的唯一答案,例如:上一个链接,其他SO帖子,如Xamarin SQLite "This is the 'bait'"
这是我的Android项目的package.config
:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.core" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.lib.e_sqlite3.android" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.provider.e_sqlite3.android" version="1.1.5" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Design" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v4" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.CardView" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.MediaRouter" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Forms" version="2.4.0.282" targetFramework="monoandroid60" />
</packages>
这是PCL项目的package.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.5" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.core" version="1.1.5" targetFramework="portable45-net45+win8+wpa81" />
<package id="Xamarin.Forms" version="2.3.4.247" targetFramework="portable45-net45+win8+wpa81" />
</packages>
管理解决它。问题是我在两个不同的项目中使用Nuget包,而我只更新了其中一个。使用相同版本的SQLite Nuget和Clean下载其他项目,Rebuild解决了这个问题。