gpt4 book ai didi

c# - 在 Xamarin.Android 中执行大量 SQlite 查询失败

转载 作者:太空狗 更新时间:2023-10-29 12:46:06 24 4
gpt4 key购买 nike

我正在开发一个从网络服务获取一些数据的应用程序。该程序是用 C# 和 Xamarin Studio 编写的。

应用程序有一个存储在文件中的本地 SQLite 数据库。我创建了一个单独的数据库类来简化数据库的内部工作(例如打开和关闭连接等)。这是此类的相关 fragment :

public static SqliteConnection connect(){
string documentPath = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal);
try {
return new SqliteConnection (string.Format ("Data Source={0};Version=3;", documentPath + "Database.db"));
} catch {
Console.WriteLine ("New DB created!");
SqliteConnection.CreateFile (documentPath + "Database.db");
return new SqliteConnection (string.Format ("Data Source={0};Version=3;", documentPath + "Database.db"));
}
}

public static void doQuery(string query){
//Console.WriteLine ("Performing no-return query: " + query);
using(var conn = connect()){
conn.Open ();
using(var cmd = conn.CreateCommand ()){
var trans = conn.BeginTransaction ();
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
cmd.Transaction = trans;
cmd.ExecuteNonQuery ();
trans.Commit ();
}
}
}

public static DataTable getQueryResult(string query){
//Console.WriteLine ("Performing return query: " + query);
using (var conn = connect()) {
conn.Open ();
using (var cmd = conn.CreateCommand ()) {
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
SqliteDataReader rdr = cmd.ExecuteReader ();
DataTable dt = new DataTable ();
dt.Load (rdr);
return dt;
}
}
}

执行大约之后。 1900 个查询,我得到这个错误:

[mono] Unhandled Exception:
[mono] Mono.Data.Sqlite.SqliteException: Unable to open the database file
[mono] unable to open database file
[mono] at Mono.Data.Sqlite.SQLite3.Reset (Mono.Data.Sqlite.SqliteStatement stmt) [0x00000] in <filename unknown>:0
[mono] at Mono.Data.Sqlite.SQLite3.Step (Mono.Data.Sqlite.SqliteStatement stmt) [0x00000] in <filename unknown>:0
[mono] at Mono.Data.Sqlite.SqliteDataReader.NextResult () [0x00000] in <filename unknown>:0
[mono] at Mono.Data.Sqlite.SqliteDataReader..ctor (Mono.Data.Sqlite.SqliteCommand cmd, CommandBehavior behave) [0x00000] in <filename unknown>:0
[mono] at (wrapper remoting-invoke-with-check) Mono.Data.Sqlite.SqliteDataReader:.ctor (Mono.Data.Sqlite.SqliteCommand,System.Data.CommandBehavior)
[mono] at Mono.Data.Sqlite.SqliteCommand.ExecuteReader (CommandBehavior behavior) [0x00000] in <filename unknown>:0
[mono] at Mono.Data.Sqlite.SqliteCommand.ExecuteNonQuery () [0x00000] in <filename unknown>:0
[mono] at Mono.Data.Sqlite.SqliteTransaction..ctor (Mono.Data.Sqlite.SqliteConnection connection, Boolean deferred

这个错误是在“var trans = conn.BeginTransaction();”处抛出的doQuery 方法中的行。

我认为这与不处理对象有关,但由于我使用 using() 进行连接和命令,所以我不明白为什么...

我希望有人能帮助我!

黛博尔

最佳答案

我的问题解决了!在扩展应用程序的后台类中,我永久保持连接打开。现在我在插入一堆元素时不会出现任何错误。

我希望这也可能对其他人有用,因为我找不到有类似问题的人。

黛博尔

关于c# - 在 Xamarin.Android 中执行大量 SQlite 查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18056166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com