我正在研究從web服務獲取一些數據的應用程序。該程序是用Xamarin Studio用C#編寫的。在Xamarin.Android中執行很多SQlite查詢失敗
該應用程序有一個存儲在文件中的本地SQLite數據庫。我創建了一個單獨的數據庫類來簡化數據庫的內部工作(例如打開和關閉連接等)。這裏有一個相關的這一類的片段:
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反= conn.BeginTransaction();」在doQuery方法內部。
我認爲這是關係到不處置的對象的東西,但因爲我使用的()爲連接和命令,我不明白爲什麼...
我希望有人能幫幫我!
DebboR
謝謝@DebboR!我到處搜索,你是對的,如果我保持我的連接打開,我不會得到這個惱人的錯誤:) – wind39