#c# #sqlite #xamarin
#c# #sqlite #xamarin
Вопрос:
Как правильно управлять SQLiteConnection, чтобы избежать исключения DatabaseConnectionException?
Я попытался поместить некоторые флаги в конструктор sqliteconnection и использовать оператор Using, но, похоже, это не работает
public class BaseDao
{
//[...] some static functions
static string Path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "mysqlite.db3");
/// <summary>
/// Searches all records of the specified type
/// </summary>
/// <typeparam name="T">the Type to search</typeparam>
/// <returns>Returns a list of all records of the specified type</returns>
public static List<T> GetItems<T>() where T : BaseEntity, new()
{
List<T> items;
using (SQLiteConnection connection = new SQLiteConnection(Path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.FullMutex, true))
{
try
{
items = connection.Query<T>("SELECT * FROM " typeof(T).Name);
}
catch (Exception ex)
{
connection.Rollback();
throw ex;
}
finally
{
connection.Close();
}
}
return items;
}
(эти функции не вызываются потоком пользовательского интерфейса.)
Комментарии:
1. Почему бы просто не сделать его синглтоном с блокировками?
2. Что такое полное сообщение об исключении?
3. Возможно, правильный вопрос: «Есть ли какой-нибудь правильный способ сделать это с помощью статических функций?»
4. Я не знаю, какое влияние оказывают эти флаги на конструктор, но ваш код выглядит потокобезопасным для меня. Я не уверен, что ваша проблема заключается в параллелизме потоков.
5. Опять же, я не знаю реализацию
SQLiteConnection
, но вам не нужно закрывать ее вfinally
блоке, если она объявлена в ausing
. Какая строка выдает исключение?