在Mono下运行sqlite获取``无法打开数据库文件'' - c#

我第一次发帖。

我制作了一个在后台运行的控制台应用程序,它是用C#编写的,并且我正在使用sqlite3来存储其信息。它在单声道下运行,但是运行几天后我得到了unable to open database file。重新启动应用程序即可解决问题,但几天后它将给我同样的错误。

我怀疑是关闭后连接没有被释放,所以我在connection.close()之后添加了释放,但是仍然收到相同的错误。我也做了一些搜索,发现this thread也有类似的问题,我按照他说的做了,但仍然遇到相同的错误。

任何帮助将不胜感激。

对不起英语不好

更新:
我的密码

private static void ExecuteNonQuery(string query)
    {
        if (isrunningundermono == true)
        {
            SqliteConnection sqlcon = new SqliteConnection(ConfigurationManager.AppSettings["connectionString"]);
            SqliteCommand sqlcmd;

            sqlcon.Open();
            sqlcmd = sqlcon.CreateCommand();
            sqlcmd.CommandText = query;
            sqlcmd.ExecuteNonQuery();
            sqlcon.Close();
            sqlcmd.Dispose();
            sqlcon.Dispose();
        }
        else
        {
            SQLiteConnection sqlcon = new SQLiteConnection(ConfigurationManager.AppSettings["connectionString"]);
            SQLiteCommand sqlcmd;

            sqlcon.Open();
            sqlcmd = sqlcon.CreateCommand();
            sqlcmd.CommandText = query;
            sqlcmd.ExecuteNonQuery();
            sqlcon.Close();
            sqlcmd.Dispose();
            sqlcon.Dispose();
        }
    }

    private static int ExecuteScalar(string query)
    {
        if (isrunningundermono == true)
        {
            SqliteConnection sqlcon = new SqliteConnection(ConfigurationManager.AppSettings["connectionString"]);
            SqliteCommand sqlcmd;

            sqlcon.Open();
            sqlcmd = sqlcon.CreateCommand();
            sqlcmd.CommandText = query;
            int total = Convert.ToInt32(sqlcmd.ExecuteScalar());
            sqlcon.Close();
            sqlcmd.Dispose();
            sqlcon.Dispose();

            return total;
        }
        else
        {
            SQLiteConnection sqlcon = new SQLiteConnection(ConfigurationManager.AppSettings["connectionString"]);
            SQLiteCommand sqlcmd;

            sqlcon.Open();
            sqlcmd = sqlcon.CreateCommand();
            sqlcmd.CommandText = query;
            int total = Convert.ToInt32(sqlcmd.ExecuteScalar());
            sqlcon.Close();
            sqlcmd.Dispose();
            sqlcon.Dispose();

            return total;
        }
    }

    private static DataTable ExecuteDataSet(string query)
    {
        if (isrunningundermono == true)
        {
            DataTable dt = new DataTable();
            SqliteConnection sqlcon = new SqliteConnection(ConfigurationManager.AppSettings["connectionString"]);
            SqliteCommand sqlcmd = new SqliteCommand(sqlcon);
            sqlcon.Open();
            sqlcmd.CommandText = query;
            SqliteDataReader reader = sqlcmd.ExecuteReader();
            dt.Load(reader);
            reader.Close();
            sqlcon.Close();
            sqlcmd.Dispose();
            sqlcon.Dispose();

            return dt;
        }
        else
        {
            DataTable dt = new DataTable();
            SQLiteConnection sqlcon = new SQLiteConnection(ConfigurationManager.AppSettings["connectionString"]);
            SQLiteCommand sqlcmd = new SQLiteCommand(sqlcon);
            sqlcon.Open();
            sqlcmd.CommandText = query;
            SQLiteDataReader reader = sqlcmd.ExecuteReader();
            dt.Load(reader);
            reader.Close();
            sqlcon.Close();
            sqlcmd.Dispose();
            sqlcon.Dispose();

            return dt;
        }
    }

    public static bool IsRunningOnMono()
    {
        return Type.GetType("Mono.Runtime") != null;
    }

参考方案

SQLiteConnection.Dispose在内部仅调用SQLiteConnection.Close,因此您仍在有效关闭命令前的连接,我想这是Mono上的问题。我认为,如果仅删除对sqlcon.Close的显式调用,则会看到更好的结果。

顺便说一句,在处理IDisposable实例时习惯使用using statement,例如:

using (var conn = new SQLiteConnection(...))
{
  conn.Open();
  using (var cmd = new SQLiteCommand(conn))
  {
  }
}

我认为在连接之前先处理该命令是很自然的,因为该命令使用了连接(而using语句有助于使连接保持正确),但是我看不出在Windows上执行相反操作而不在Mono上起作用的理由...

将字符串分配给numpy.zeros数组[重复] - python

This question already has answers here: Weird behaviour initializing a numpy array of string data                                                                    (4个答案)         …

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…

我不明白为什么sum(df ['series'])!= df ['series']。sum() - python

我正在汇总一系列值,但是根据我的操作方式,我会得到不同的结果。我尝试过的两种方法是:sum(df['series']) df['series'].sum() 他们为什么会返回不同的值?示例代码。s = pd.Series([ 0.428229 , -0.948957 , -0.110125 , 0.791305 , 0…

T-SQL等价的正则表达式'\ b' - c#

我正在将利用regex的CLR函数转换为SQL函数。我知道SQL Server并不完全支持正则表达式,但是我只需要一种情况就可以搜索单词。搜索字段值:{"Id":1234, "Title": "The quick brown"}.NET中的正则表达式模式:'\b' + '…