在 Xamarin C# 中选择对 Sqlitie DB 的异步原始查询的问题

Posted

技术标签:

【中文标题】在 Xamarin C# 中选择对 Sqlitie DB 的异步原始查询的问题【英文标题】:Problem with select in async raw query to a Sqlitie DB in Xamarin C# 【发布时间】:2019-02-11 21:46:57 【问题描述】:

使用ExecuteAsync 可用于创建、插入等,但不适用于选择。 这是两个有效的查询:CREATE TABLE t(x INTEGER PRIMARY KEY ASC, y, z)insert into t(y, z) values(2, 2)

但选择没有。这是我的代码:

SQLiteAsyncConnection conn = new SQLiteAsyncConnection(App.Databaselocation);
var result = await conn.ExecuteAsync("select y from t");

并抛出此 SQLiteException:

"SQLite.SQLiteException: 行\n at SQLite.SQLiteCommand.ExecuteNonQuery () [0x000ad] 在 /Users/vagrant/git/src/SQLite.cs:2334 \n 在 SQLite.SQLiteConnection.Execute(System.String 查询,System.Object[] args) [0x0003a] 在 /Users/vagrant/git/src/SQLite.cs:673 \n at SQLite.SQLiteAsyncConnection+c__DisplayClass21_0.b__0 () [0x00013] 在 /Users/vagrant/git/src/SQLiteAsync.cs:222 \n 在 System.Threading.Tasks.Task1[TResult].InnerInvoke () [0x0000f] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 \n at System.Threading.Tasks.Task.Execute () [0x00010] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 \n--- End of stack trace from previous location where exception was thrown ---\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 \n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 \n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 \n at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 \n at System.Runtime.CompilerServices.TaskAwaiter1[TResult].GetResult () [0x00000] 在 :0 \n 在 Byo.PoblacionPage+d__1.MoveNext () [0x00044] 在 C:\Users\sgmon\OneDrive\Projects\Mars\Pob.xaml.cs:41 "

【问题讨论】:

【参考方案1】:

您需要使用 Query/QueryAsync 才能从 sql 选择中返回结果集:

var result = await conn.QueryAsync<t>("select y from t");

【讨论】:

是返回的类?没有这个可以吗?应用程序的架构发生变化,数据库并不总是相同...因此我需要原始查询或在运行时创建类的方法 =/ 该框架不支持基于动态对象的结果集(您可以在 github 上搜索打开/关闭的问题),同样在 ios 上,动态语言运行时不可用,因为 System.Reflection.Emit 不可用法律诉讼。

以上是关于在 Xamarin C# 中选择对 Sqlitie DB 的异步原始查询的问题的主要内容,如果未能解决你的问题,请参考以下文章

c#中xamarin怎么添加包

Xamarin 波斯语日期选择器

在 Xamarin c# 中滚动到可观察集合中的选定项目

用 C# (Xamarin) 编写 Android 应用程序 [关闭]

Xamarin对Visual Studio用户免费 Xamarin SDK将开源

C# Xamarin UITest-如何断言元素存在且文本正确