问题标签 [sqlite.net]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - SQLite.NET - System.NotSupportedException:无法编译:参数
我在 Xamarin iOS 项目中使用 SQLite.NET Async ( http://www.nuget.org/packages/SQLite.Net.Async-PCL/ ),但使用表谓词查询时遇到问题。
每当我使用下面非常简单的 Get 方法时,我都会收到无法编译表达式的异常 System.NotSupportedException: 无法编译:参数。
但是,如果我使用低级别的查询,就像 GetQuery 方法一样,它可以正常工作。在我的表的定义或阻止 sqlite.net 编译表达式的方法中我做错了什么吗?
编辑#1:问题似乎与我的方法是通用的事实有关。如果我将它们更改为特定于模型“connection.Table<EventDataModel>.Where(...”它会起作用。通用方法会不起作用吗?
编辑#2:我在 T 上添加了一个 'class' 约束,以配合现有的 'IDataModel, new()' 约束,这似乎解决了这个问题......这有意义吗?
c# - SQLite.NET PCL 多线程访问 MONO
我一直在使用SQLite.Net
forMonodroid
和Monotouch
,为了避免跨线程访问的问题,我使用此代码设置Serialized
模式。
这确实阻止了任何问题(SIGSEVC
出现错误)。
我现在尝试将我的库代码移动到PCL
,所以使用oysteinkrog/SQLite.Net-PCL
但设置配置模式的选项似乎不再存在。搜索代码我发现在SQLite.Net.Interop.ISQLiteApi
以下行中。
所以设置配置的能力没有实现。
现在,当我的后台线程从 Web 服务返回更新时,我再次SIGSEVC
在 Monodroid 上遇到错误。
数据库连接使用静态连接共享,所有数据库访问通过锁(对象)。
问题:
- 是否可以以某种方式将配置设置为序列化?
- 或者,我有没有更好的方法来定义我的连接和数据库访问以避免这个问题。
sqlite - 用整数替换 sqlite.net “bigint” 以实现自动增量主键约束
我们将 sqlite 用于我们的移动项目 - 但是当我们尝试使用我们的长 id 变量作为主键自动增量时 - 代码给出错误“ Autoincrement is only allowed in integer primary key
”。当我在网上查看这个错误时,我发现 sqlite 中的自动增量不允许用于bigint
类型。
有趣的是它bigint
也是由整数实现的——sqlite 没有bigint
类型——它只是使用整数的大小来决定它是否为 a bigint
。
http://www.sqlite.org/datatype3.html
bigint
为了解决这个问题 - 我用“ ”替换了创建表的开源代码integer
,并编写了一些测试代码来验证它是否在常规整数的边界之外工作(添加了一个 id 大于整数范围的项目目的并不断添加10多个对象)。
看起来它现在正在工作 - 但我想知道它是否会导致其他一些问题。我们正在将移动应用程序 ID 同步到我们的数据库 ID,因此我们肯定会有大于正常整数范围的 ID。
这个解决方案是一个有效的解决方案吗?这会造成什么样的麻烦?
sqlite - 如何使用 SQLite.NET PCL 运行一批 SQL 语句
在过去,我一直避免使用 ORM 并且总是手工制作参数化查询等。这在第一次开发应用程序时非常耗时且非常痛苦。最近我决定再看看 ORM,特别是 Sqlite.NET ORM。
我想使用 SQLite ORM 功能,但也能够运行一批本机 SQL 命令来预填充数据库。
我们正在使用 SqliteNetExtensions-MvvmCross dll 来启用一对多关系等,这一切看起来都很好。当我想用配置数据为数据库播种时,我的问题就出现了。我希望简单地提供一个包含一系列 sql 语句的 sql 文件,它将一个接一个地运行。
我已经从 GITHub 获取了 SQlite.NET 代码并运行了测试。然后,我扩展了具有简单 [Product] 表的 StringQueryTests 类来执行以下操作:-
当我运行它时,它不会抛出错误,实际上行为似乎是它只会运行第一个命令。如果我将 sb.ToString() 的内容粘贴到 sqlite 数据库查询窗口中,它将正常工作。
这是预期的行为吗?如果是这样,我该如何克服这个问题,以便我可以使用上述方法。如果可能的话,我真的不想创建对象来管理所有 SQL 语句。
我可以看到可以采用多种方法来解决这个问题 - 任何人都得到了他们认为可以解决这个问题的解决方法或建议?
亲切的问候
艾伦。
c# - sqlite.net + monotouch = SIGSEGV 崩溃
我们正在使用以下内容:
- Xamarin 3(Xamarin 形式)
- 单触
- sqlite.net
- iOS模拟器/硬件
该应用程序在后台线程上与服务器同步数据。整个应用程序只共享一个 SQLite 连接对象。前台查询在后台同步运行的同时执行。所有这些都在应用程序的 Windows 8.1 版本(即,在 MSFT Surface 和类似版本上)上运行良好。但是,一旦我们切换到 Xamarin/mono,我们就开始不断崩溃,如下所示。
研究导致了这篇文章:http ://www.aaronheise.com/2012/12/monotouch-sqlite-sigsegv/
他使用的是 Mono.Data.SqliteClient,而不是我们现在使用的 sqlite.net。
他的解决方案包括显式处理 Command 对象以确保 GC 能够跟上等。当我尝试将我的 Command 对象(来自 sqlite.net)包装在 using(){} 子句中时,我发现它们不是一次性的。
我尝试插入 100 毫秒的延迟并停止崩溃,但这对我们来说不是一个可行的解决方案。
sqlite.net 这里有希望吗,还是我应该寻找一种不同的方式来使用 sqlite?
xamarin - 在 Xamarin.* 中使用 BreezeSharp 作为 SQLite.Net 替代品?
如果我只使用 BreezeSharp 在移动应用程序中进行数据管理,那会是多么成功和愉快?有了在本地导出/保存/导入的能力,我可以想象一个场景,我从服务器中提取然后主要在 EntityManager 缓存中工作。
想到缓存有多少,以及它如何处理溢出的问题。我还想知道如果缓存没有基于磁盘的溢出机制,我最终是否会编写大量代码来管理导出的实体。
xamarin - 如何在 sqlite.net PCL 中使用 InsertOrReplace?
我从这里(https://github.com/oysteinkrog/SQLite.Net-PCL)使用 PCL 版本的 sqlite.net。
这是我的简单课程。
当创建一个新的 LogEntry 实例时,Key 会自动设置为 0。我将 Date 设置为某个值,然后调用 InsertOrReplace。记录确实保存在我的数据库中。Key 字段获取自动增量值,该值恰好为 0,因为它是第一条记录。
然后我创建一个新的 LogEntry 实例(Key 自动初始化为 0)并将日期设置为其他值。然后我调用 InsertOrReplace。由于存在 Key 为 0 的现有记录,因此该记录将被更新。
处理这个问题的正确方法是什么?我考虑将密钥初始化为-1,但这似乎也不起作用。
有没有人有这个工作的例子?
c# - sqlite.net table where 子表的条件
我正在使用 Xamarin 表单、SQLite.net 和 SQLitenet 扩展,但我无法弄清楚为什么我希望简单的东西不起作用。
我有两节课
和
我只是尝试执行以下查询,但它总是失败。
我得到了这个例外
System.Diagnostics.Debugger.Mono_UnhandledException(ex={System.Reflection.TargetInvocationException:异常已被调用的目标抛出。---> System.NullReferenceException:对象引用未设置为 SQLite.Net 上的对象实例.TableQuery
1[MeasureONE.MeasurementInstanceModel].CompileExpr (System.Linq.Expressions.Expression expr, System.Collections.Generic.List
1 queryArgs) [0x00000] in :0 at SQLite.Net.TableQuery1[MeasureONE.MeasurementInstanceModel].CompileExpr (System.Linq.Expressions.Expression expr, System.Collections.Generic.List
1 queryArgs) [0x00000] in :0 at SQLite.Net.TableQuery1[MeasureONE.MeasurementInstanceModel].CompileExpr (System.Linq.Expressions.Expression expr, System.Collections.Generic.List
1 queryArgs) [0x00000] in :0 at SQLite.Net.TableQuery1[MeasureONE.MeasurementInstanceModel].GenerateCommand (System.String selectionList) [0x00000] in <filename unknown>:0 at SQLite.Net.TableQuery
1[MeasureONE .MeasurementInstanceModel].GetEnumerator () [0x00000] in :0 at System.Collections.Generic.List1[MeasureONE.MeasurementInstanceModel].AddEnumerable (IEnumerable
1 可枚举)[0x00000] in :0 at System.Collections.Generic.List1[MeasureONE.MeasurementInstanceModel]..ctor (IEnumerable
1 集合)[0x00000] in :0 在 System。 Linq.Enumerable.ToList[MeasurementInstanceModel] (IEnumerable1 source) [0x00000] in <filename unknown>:0 at MeasureONE.Repository
1[MeasureONE.MeasurementInstanceModel].GetAll[DateTime] (System.Linq.Expressions.Expression1 predicate, System.Linq.Expressions.Expression
1 orderBy, Nullable1 descending, Nullable
1 skip, Nullable1 count) [0x00094] in /Users/jean-sebastiencote/MeasureONE/MeasureONE/Models/Repository/Repository.cs:48 at MeasureONE.Repository
1[MeasureONE.MeasurementInstanceModel].GetAllWithChildren[DateTime] (System.Linq.Expressions.Expression1 predicate, System.Linq.Expressions.Expression
1 orderBy, Nullable1 descending, Nullable
1 个跳过,可空1 count) [0x00009] in /Users/jean-sebastiencote/MeasureONE/MeasureONE/Models/Repository/Repository.cs:54 at MeasureONE.MeasurementListViewModel.Load (System.Linq.Expressions.Expression
1 个预测,可空1 skip, Nullable
1 个计数)[0x00049] 在 /Users/jean-sebastiencote/MeasureONE/MeasureONE/ViewModels/MeasurementListViewModel.cs:42 在 MeasureONE.MeasurementListViewModel.Load(MeasureONE.FilterViewModel 过滤器)[0x000cf] 在 /Users/jean-sebastiencote/MeasureONE/ MeasureONE/ViewModels/MeasurementListViewModel.cs:34 at MeasureONE.MeasurementListViewModel.m__1 (GalaSoft.MvvmLight.Messaging.NotificationMessage`1 msg) [0x00007] in /Users/jean-sebastiencote/MeasureONE/MeasureONE/ViewModels/MeasurementListViewModel.cs:21 at (包装器托管到本机) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 在 System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System .Reflection.Binder 绑定器,System.Object[] 参数,System.Globalization。CultureInfoculture) [0x00000] in :0 --- 内部异常堆栈跟踪结束 ---
从堆栈跟踪中可以看出,我在代码中还有一些东西,例如 order by。但这一切都很好,只要我在子表上没有条件。
c# - 如何在不使用 sqlite 原始语句/conn.execute() 的情况下为 Sqlite.net 设置默认值
我知道这是一个愚蠢的问题,但我无法在任何地方找到答案。如何为sqlite.net模型中的列设置默认值?这是我的模型类:
我想将Not Null列IsTaxable的默认值设置为true,我应该如何实现?顺便说一句,我不想使用原始 sql 语句,即conn.execute();
谢谢你。
sqlite - Xamarin.Forms 使用 SQLite.Net.Async
我已按照此处的说明 http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/databases/ - 同步连接到 SQLite 数据库。
我想将其更改为异步连接(SQLiteAsyncConnection),但无法使其正常工作。
根据此处的说明 - https://components.xamarin.com/gettingstarted/sqlite-net - 它只需要路径作为参数
这不起作用,错误表明预期的参数是:
连接函数、TaskScheduler 和 TaskCreationOptions
我不知道该怎么做,也找不到任何有效的例子。
提前致谢