【问题标题】:Why does ExecuteNonQuery stop working after two inserts?为什么 ExecuteNonQuery 在两次插入后停止工作?
【发布时间】: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


【解决方案1】:

对于给定的代码示例,猜测哪里可能出错有点困难,但“使用”构造可能有助于确保资源被释放:

using (var conn = new SQLiteConnection(connectionString))
{
    using (var cmd = new SQLiteCommand(query, conn))
    {
        await conn.OpenAsync();
        using (var reader = await cmd.ExecuteReaderAsync())
        {
             onDataReturned?.Invoke(reader);       
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多