- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Windows 8 发布预览版和 C#(VS 2012) 开发 Metro 应用程序,我是 SQLite 的新手,我在我的应用程序中集成了 SQLite 3.7.13,它运行良好,观察下面的代码
var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Test.db");
using (var db = new SQLite.SQLiteConnection(dbPath))
{
var data = db.Table<tablename>().Where(tablename => tablename.uploaded_bool == false && tablename.Sid == 26);
try
{
int iDataCount = data.Count();
int id;
if (iDataCount > 0)
{
for (int i = 0; i < iDataCount; i++)
{
Elements = data.ElementAt(i);
id = Elements.id;
/*
Doing some code
*/
}
int i = db.Delete<tablename>(new tablename() { Sid = 26 });
}
}
catch (Exception ex)
{
}
}
其中“Sid”是我数据库中的列,数字“26”我将得到 n 行所以,使用 for 循环我需要做一些代码,在 for 循环之后我需要删除数据库中 Sid(26) 的记录,所以在这一行
int i = db.Delete<tablename>(new tablename() { Sid = 26 });
我遇到unable to close due to unfinalised statements
异常,所以我的问题是如何在sqlite3中完成语句,显然SQLite3有一个finalize方法来销毁以前的数据库调用,但我不是确定如何实现这一点。请帮助我。
最佳答案
在幕后,sqlite-net 做了一些令人惊奇的事情,试图为您管理查询和连接。
例如,行
var data = db.Table<tablename>().Where(...)
实际上并不建立连接或对数据库执行任何操作。相反,它创建了一个名为 TableQuery 的可枚举类的实例。
当你打电话时
int iDataCount = data.Count();
TableQuery实际执行
GenerateCommand("count(*)").ExecuteScalar<int>();
当你打电话时
Elements = data.ElementAt(i);
TableQuery实际调用
return Skip(index).Take(1).First();
Take(1).First() 最终调用 GetEnumerator,它编译一个 SQLite 命令,用 TOP 1 执行它,并将结果序列化回你的数据类.
因此,基本上,每次您调用 data.ElementAt 时,您都在执行另一个查询。这与标准 .NET 枚举不同,在标准 .NET 枚举中,您只是访问集合或数组中的元素。
我相信这是您问题的根源。我建议不要获取计数并使用 for(i, ...) 循环,而只需执行 foreach (tablename tn in data)。这将导致一次获取所有记录,而不是在循环中逐个记录获取。仅此一项就足以关闭查询并允许您在循环期间删除表。如果没有,我建议您创建一个集合并在循环期间将每个 SID 添加到集合中。然后,在循环之后返回并在另一遍中删除 sids。最坏的情况是,您可以关闭循环之间的连接。
希望对您有所帮助。
关于c# - 完成 SQLite 3 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12039867/
从 Redis 获取消息时,onDone:(){print('done')} 从未起作用。 import 'package:dartis/dartis.dart' as redis show PubS
昨天我玩了一些vim脚本,并设法通过循环来对当前输入的内容进行状态栏预测(请参见屏幕截图(灰色+黄色栏))。 问题是,我不记得我是怎么得到的,也找不到我用于该vim魔术的代码片段(我记得它很简单):它
我尝试加载 bash_completion在我的 bash (3.2.25) 中,它不起作用。没有消息等。我在我的 .bashrc 中使用了以下内容 if [ -f ~/.bash_completio
我正在尝试构建一个 bash 完成例程,它将建议命令行标志和合适的标志值。例如在下面 fstcompose 命令我想比赛套路先建议 compose_filter= 标志,然后建议来自 [alt_seq
当我尝试在重定向符号后完成路径时,bash 完成的行为就好像它仍在尝试在重定向之前完成命令的参数一样。 例如: dpkg -l > /med标签 通过在 /med 之后点击 Tab我希望它完成通往 /
我的类中有几个 CAKeyframeAnimation 对象。 他们都以 self 为代表。 在我的animationDidStop函数中,我如何知道调用来自哪里? 是否有任何变量可以传递给 CAKe
我有一个带有 NSDateFormatter 的 NSTextField。格式化程序接受“mm/dd/yy”。 可以自动补全日期吗?因此,用户可以输入“mm”,格式化程序将完成当前月份和年份。 最佳答
有一个解决方案可以使用以下方法完成 NSTextField : - (NSArray *)control:(NSControl *)control textView:(NSTextView *)tex
我正在阅读 Passport 的文档,我注意到 serialize()和 deserialize() done()被调用而不被返回。 但是,当使用 passport.use() 设置新策略时在回调函数
在 ubuntu 11.10 上的 Firefox 8.0 中,尽管 img.complete 为 false,但仍会调用 onload 函数 draw。我设法用 setTimeout hack 解决
假设我有两个与两个并行执行的计算相对应的 future 。我如何等到第一个 future 准备好?理想情况下,我正在寻找类似于Python asyncio's wait且参数为return_when=
我正在寻找一种 Java 7 数据结构,其行为类似于 java.util.Queue,并且还具有“最终项目已被删除”的概念。 例如,应可以表达如下概念: while(!endingQueue.isFi
这是一个简单的问题。 if ($('.dataTablePageList')) { 我想做的是执行一个 if 语句,该语句表示如果具有 dataTablesPageList 类的对象也具有 menu
我用replaceWith批量替换了许多div中的html。替换后,我使用 jTruncate 来截断文本。然而它不起作用,因为在执行时,replaceWith 还没有完成。 我尝试了回调技巧 ( H
有没有办法调用 javascript 表单 submit() 函数或 JQuery $.submit() 函数并确保它完成提交过程?具体来说,在一个表单中,我试图在一个 IFrame 中提交一个表单。
我有以下方法: function animatePortfolio(fadeElement) { fadeElement.children('article').each(function(i
我刚刚开始使用 AndEngine, 我正在像这样移动 Sprite : if(pValueY < 0 && !jumping) { jumping =
我正在使用 asynctask 来执行冗长的操作,例如数据库读取。我想开始一个新 Activity 并在所有异步任务完成后呈现其内容。实现这一目标的最佳方法是什么? 我知道 onPostExecute
我有一个脚本需要命令名称和该命令的参数作为参数。 所以我想编写一个完成函数来完成命令的名称并完成该命令的参数。 所以我可以这样完成命令的名称 if [[ "$COMP_CWORD" == 1 ]];
我的应用程序有一个相当奇怪的行为。我在 BOOT_COMPLETE 之后启动我的应用程序,因此在我启动设备后它是可见的。 GUI 响应迅速,一切正常,直到我调用 finish(),按下按钮时,什么都没
我是一名优秀的程序员,十分优秀!