【发布时间】:2019-08-01 05:42:37
【问题描述】:
我的 sqlite 请求有问题。 我正在为一些视频开发标签系统。
当我在我的数据库中插入视频时,一切正常,但是当涉及到标签和 video_tag_link 时,我只能添加一个,而下一个会使我的应用程序冻结。
问题不是来自 sql 请求。我直接在数据库浏览器中试用它们,它们运行良好。
这是我用来插入数据库的代码:
try
{
if (dbConnection == null)
await InitDatabaseAsync();
if (dbConnection.State != System.Data.ConnectionState.Open)
await dbConnection.OpenAsync();
SQLiteCommand command = new SQLiteCommand(query, dbConnection);
await command.ExecuteNonQueryAsync();
onDataReturned?.Invoke(command.ExecuteReader());
dbConnection.Close();
}
catch (SQLiteException ex)
{
Console.WriteLine(ex);
dbConnection.Close();
}
这是我对标签的要求:
BEGIN TRANSACTION;
INSERT INTO tags (name) VALUES ('Test Tag');
INSERT INTO tag_video_link (video_id, tag_id) VALUES (2, (SELECT id FROM tags ORDER BY id DESC LIMIT 1));
COMMIT;
我不知道插入 100 行的测试数据生成如何完美运行,但插入 1 个带有视频链接的标签不起作用。
我不知道它是否相关,但在 onDataReturned 中没有调用数据库。 它总是在尝试发出另一个请求之前关闭连接。
有人可以帮我吗?
PS:对不起,如果我拼写错误或者我不是很清楚,我不会经常说英语。
【问题讨论】:
-
您的问题没有完全理解所需的所有信息。 onDataReturned 是什么?为什么它可以为空?代码将其设置为 null 或不为 null 的点在哪里?
-
“让我的应用程序冻结”是什么意思?是否发生异常?如果有,异常和stacktrace是什么?
-
可能是视频链接中的转义序列或其长度?检查链接..
-
@Steve : onDataReturned 是一个可以为空的操作,但在这种情况下不会发生。它只是让读者在不同的类中创建我的实体。
-
@user1666620 :我不知道如何澄清。我的应用程序只是冻结。这很奇怪,因为我的数据库函数没有在 ui 线程中处理。更奇怪的是,我没有任何错误信息或任何异常。当程序发出第一个请求时,一切正常,但对于第二个,程序只是冻结在“await command.ExecuteNonQueryAsync();”。我没有崩溃,它没有关闭。一切都冻结了。
标签: c# wpf sqlite sqlite-net