我第一次发帖。
我制作了一个在后台运行的控制台应用程序,它是用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数组[重复] - pythonThis 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' + '…