C# c sqlite堆栈评估

C# c sqlite堆栈评估,c#,sqlite,C#,Sqlite,我在函数行中的find文档中有奇怪的错误 在调试模式命令中,所有属性都包含相同的异常 无法计算表达式,因为机器代码的帧位于调用堆栈的顶部 什么会导致这样的错误?我不知道为什么它不起作用 单身人士: public sealed class Singleton { private static object syncRoot = new Object(); private static SQLiteConnection connection; public static

我在函数行中的find文档中有奇怪的错误

在调试模式命令中,所有属性都包含相同的异常 无法计算表达式,因为机器代码的帧位于调用堆栈的顶部

什么会导致这样的错误?我不知道为什么它不起作用

单身人士:

public sealed class Singleton
{
    private static object syncRoot = new Object();

    private static SQLiteConnection connection;

    public static SQLiteConnection Connection
    {
        get
        {
            if (connection == null)
            {
                lock (syncRoot)
                {
                    if (connection == null)
                    {
                        connection = new SQLiteConnection(@"data source=D:\informServicesDocs.db3");
                    }
                }
            }
            if (connection.State != System.Data.ConnectionState.Open)
            {
                connection.Open();
            }
            return connection;
        }
    }
}
有问题的功能:

public IEnumerable<InformServiceBriefInfo> FindDocuments(InformServiceSearchInfo criteria, int limit, ref int page, out int count)
    {   
            var query = string.Format(@"SELECT *       
                      FROM [BriefDocument]
                        {0}
                      ORDER BY [CreatedDate] DESC", whereStr);

            string queryCount = string.Format("SELECT COUNT([Id]) FROM [BriefDocument] {0}", whereStr);

            List<InformServiceBriefInfo> docs = new List<InformServiceBriefInfo>();
            var con = Singleton.Connection;
            {
                using (var command = new SQLiteCommand(con))
                {
                    command.CommandText = queryCount;
                    var value = command.ExecuteScalar();
                    count = (value == DBNull.Value) ? 0 : (int)(long)value;

                    command.CommandText = query;
                    if (limit > 0)
                    {
                        if (page > count / limit)
                            page = count / limit;
                        int offset = page * limit;
                        command.CommandText += string.Format(" LIMIT {0} OFFSET {1}", limit, offset);
                    }

                    using (SQLiteDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var doc = ReadBriefDocument(reader);
                            docs.Add(doc);
                        }
                    }
                }
            }
            return docs;
    }

当您在ExecuteReader或ExecuteScalar期间明确暂停调试器时,是否会发生这种情况?@ThomasLevesque,听起来很奇怪,但当我在SQLiteDataReader=command上放置断点时。ExecuteReader visual studio会引发异常上下文开关死锁。@ThomasLevesque,我注意到,当数据库大小增加时会出现此问题。当您在ExecuteReader或ExecuteScalar期间明确暂停调试器时是否会发生此问题?@ThomasLevesque,听起来很奇怪,但当我在SQLiteDataReader=command.ExecuteReader上放置断点时,visual studio会抛出异常上下文开关死锁。@ThomasLevesque,我注意到当数据库的大小增加时会出现此问题。
public IEnumerable<InformServiceBriefInfo> FindDocuments(InformServiceSearchInfo criteria, int limit, ref int page, out int count)
    {   
            var query = string.Format(@"SELECT *       
                      FROM [BriefDocument]
                        {0}
                      ORDER BY [CreatedDate] DESC", whereStr);

            string queryCount = string.Format("SELECT COUNT([Id]) FROM [BriefDocument] {0}", whereStr);

            List<InformServiceBriefInfo> docs = new List<InformServiceBriefInfo>();
            var con = Singleton.Connection;
            {
                using (var command = new SQLiteCommand(con))
                {
                    command.CommandText = queryCount;
                    var value = command.ExecuteScalar();
                    count = (value == DBNull.Value) ? 0 : (int)(long)value;

                    command.CommandText = query;
                    if (limit > 0)
                    {
                        if (page > count / limit)
                            page = count / limit;
                        int offset = page * limit;
                        command.CommandText += string.Format(" LIMIT {0} OFFSET {1}", limit, offset);
                    }

                    using (SQLiteDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var doc = ReadBriefDocument(reader);
                            docs.Add(doc);
                        }
                    }
                }
            }
            return docs;
    }