Потеря таблиц Sqlite при развертывании на Monodroid - PullRequest
3 голосов
/ 06 октября 2011

Мы используем Visual Studio 2010, Monodroid и SQLite

Мы создаем базу данных по пути myContext.GetDatabasePath ("mydb.db3"). AbsolutePath с использованием метода SqliteConnection.CreateFile (...).

Итак, наша строка подключения: «Источник данных = / data / data / myapp.myapplication / database / mydb.db3temp;»

Мы создаем таблицу и вставляем несколько записей, используя SqliteCommand.ExecuteNonQuery ().

Мы можем запускать запросы выбора с помощью SqliteCommand.ExecuteScalar () сразу после вставки.

Метод SqliteDataAdapter.Fill (table) не выполняется успешно и выдает нам это исключение:

System.EntryPointNotFoundException: sqlite3_column_origin_name
 at (wrapper managed-to-native) Mono.Data.Sqlite.UnsafeNativeMethods:sqlite3_column_origin_name (intptr,int)
 at Mono.Data.Sqlite.SQLite3.ColumnOriginalName (Mono.Data.Sqlite.SqliteStatement stmt, Int32 index) [0x00000] in <filename unknown>:0 
 at Mono.Data.Sqlite.SqliteDataReader.GetSchemaTable (Boolean wantUniqueInfo, Boolean wantDefaultValue) [0x00000] in <filename unknown>:0 
 at Mono.Data.Sqlite.SqliteDataReader.GetSchemaTable () [0x00000] in <filename unknown>:0 
 at System.Data.Common.DataAdapter.BuildSchema (IDataReader reader, System.Data.DataTable table, SchemaType schemaType, MissingSchemaAction missingSchAction, MissingMappingAction missingMapAction, System.Data.Common.DataTableMappingCollection dtMapping) [0x00000] in <filename unknown>:0 
 at System.Data.Common.DataAdapter.BuildSchema (IDataReader reader, System.Data.DataTable table, SchemaType schemaType) [0x00000] in <filename unknown>:0 
 at System.Data.Common.DataAdapter.FillTable (System.Data.DataTable dataTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, System.Int32& counter) [0x00000] in <filename unknown>:0 
 at System.Data.Common.DataAdapter.FillInternal (System.Data.DataTable dataTable, IDataReader dataReader) [0x00000] in <filename unknown>:0 
 at System.Data.Common.DataAdapter.Fill (System.Data.DataTable dataTable, IDataReader dataReader) [0x00000] in <filename unknown>:0 
 at System.Data.Common.DbDataAdapter.Fill (System.Data.DataTable dataTable, IDbCommand command, CommandBehavior behavior) [0x00000] in <filename unknown>:0 
 at System.Data.Common.DbDataAdapter.Fill (System.Data.DataTable dataTable) [0x00000] in <filename unknown>:0 
 at (wrapper remoting-invoke-with-check) System.Data.Common.DbDataAdapter:Fill (System.Data.DataTable)
 at ...

Если мы внесем какие-либо изменения в код приложения и повторно развернем его, то файл db все еще существует на устройстве Android, но SqliteCommand.ExecuteScalar () и SqliteDataAdapter.Fill (table) будут выдавать исключения, которые говорят, что таблица не существует:

Mono.Data.Sqlite.SqliteException: SQLite error
no such table: MyTable
 at Mono.Data.Sqlite.SQLite3.Prepare (Mono.Data.Sqlite.SqliteConnection cnn, System.String strSql, Mono.Data.Sqlite.SqliteStatement previous, UInt32 timeoutMS, System.String& strRemain) [0x00000] in <filename unknown>:0 
 at Mono.Data.Sqlite.SqliteCommand.BuildNextCommand () [0x00000] in <filename unknown>:0  

Это ожидаемое поведение Monodroid?Должны ли мы потерять таблицы после повторного развертывания приложения?Как мы должны использовать SqliteDataAdapter.Fill ()?

Спасибо

1 Ответ

3 голосов
/ 06 октября 2011

По умолчанию файлы, которые вы создаете, удаляются при удалении приложения на Android. В Visual Studio выберите Сервис-> Параметры-> Моно для Android и включите «Сохранять данные между развертываниями приложений». Это передаст флаг удаления, который скажет ему оставить ваши данные на устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...