C# 多个update语句抛出“;无法打开";

C# 多个update语句抛出“;无法打开";,c#,sqlite,windows-runtime,sql-update,sqlite-net,C#,Sqlite,Windows Runtime,Sql Update,Sqlite Net,当我试图在WinRT中的SQLite上的同一事务中对同一个表执行多个更新时,我遇到了一个“无法打开”异常 我已经为这个用例创建了一个示例应用程序。下面是代码,单击第一个按钮时,我正在事务中创建一个表,单击另一个按钮时,我正在尝试第二次更新相同的记录。在那里,它抛出一个“无法打开”异常 : private SQLiteConnection getConnection() { var connection=SQLiteConnectionPool.Shared.GetConnection( 新的SQ

当我试图在WinRT中的SQLite上的同一事务中对同一个表执行多个更新时,我遇到了一个“无法打开”异常

我已经为这个用例创建了一个示例应用程序。下面是代码,单击第一个按钮时,我正在事务中创建一个表,单击另一个按钮时,我正在尝试第二次更新相同的记录。在那里,它抛出一个“无法打开”异常

:

private SQLiteConnection getConnection()
{
var connection=SQLiteConnectionPool.Shared.GetConnection(
新的SQLiteConnectionString(“sample.db”,false));
回路连接;
}
私有无效按钮\u单击\u 1(对象发送者,路由目标)
{
SQLiteConnection con=getConnection();
con.BeginTransaction();
{
尝试
{
var命令=新的SQLiteCommand(con){
命令文本=
@“创建表konysyncMETAINFO(
id bigint不为空,
版本号int,
lastserversynccontext nvarchar(1000),
过滤值nvarchar(1000),
ReplaySequenceEnumber整数,
lastgeneratedid整数,
scopename nvarchar(100),
主键(id))“
};
var xyz=(双精度)command.ExecuteNonQuery();
var command2=新的SQLiteCommand(con){
命令文本=
@“插入konysyncMETAINFO
(id、scopename、versionnumber、lastserversynccontext、,
ReplaySequenceEnumber,lastgeneratedid)
值('1'、'testscope'、'0'、''、'0'、'-1')”
};
var xyz2=(双精度)command2.ExecuteNonQuery();
var command3=新的SQLiteCommand(con){
命令文本=
@“插入konysyncMETAINFO
(id、scopename、versionnumber、lastserversynccontext、,
ReplaySequenceEnumber,lastgeneratedid)
值('2'、'testscope2'、'0'、''0'、'-1')”
};
var xyz3=(双精度)command3.ExecuteNonQuery();
con.Commit();
}
捕获(例外情况除外)
{
con.Rollback();
}
}
}
私有无效按钮\u单击\u 2(对象发送方,路由目标)
{
SQLiteConnection con=getConnection();
con.BeginTransaction();
{
尝试
{
var命令=新的SQLiteCommand(con){
命令文本=
@“更新konysyncMETAINFO
设置lastgeneratedid='4'
其中scopename='testscope'
};
var xyz=(双精度)command.ExecuteNonQuery();
//var command2=new SQLiteCommand(con){CommandText=“插入konysyncMETAINFO(id、scopename、versionnumber、lastserversynccontext、ReplaySequenceEnumber、LastGenerateId)值('3'、'testscope3'、'0'、'0'、'-1');
//var xyz2=(双精度)command2.ExecuteNonQuery();
var command3=新的SQLiteCommand(con){
命令文本=
@“更新konysyncMETAINFO
设置lastgeneratedid='3'
其中scopename='testscope'
};
var xyz3=(双精度)command3.ExecuteNonQuery();
con.Commit();
}
捕获(例外情况除外)
{
con.Rollback();
}
}
}

您可能在我的sqlite网络中偶然发现过。我已经创建了一个已经被拉回到主分叉,但从那时起就没有新的。您可以查看并检查它是否解决了您的问题。

打开数据库后立即添加此代码将解决问题(在侧加载时以及通过应用商店下载应用程序时)

verifySQLResult(SQLite3.Execute(_db,“PRAGMA temp_store=memory;”),0, 0, 0));

资料来源:


为了更好地格式化问题中的代码,请尝试在第一位代码“private SQLLite…”之前加上4个空格。谢谢您的提示,下次会这样做的。