Nous utilisons Visual Studio 2010, MonoDroid et SQLitetables Sqlite lors du déploiement sur MonoDroid à
Nous créons une base de données au chemin myContext.GetDatabasePath ("mydb.db3"). AbsolutePath en utilisant la SqliteConnection.CreateFile (. ..) méthode. Donc, notre chaîne de connexion est "Source de données =/data/data/myapp.myapplication/databases/mydb.db3temp;"
Nous créons une table et insérons plusieurs enregistrements en utilisant SqliteCommand.ExecuteNonQuery().
Nous pouvons exécuter des requêtes select avec SqliteCommand.ExecuteScalar() immédiatement après l'insertion.
méthode SqliteDataAdapter.Fill (table) ne fonctionne pas correctement et nous donne cette exception:
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 ...
Si nous apportons des modifications au code d'application et de redéployer, le fichier db existe toujours sur l'appareil Android mais SqliteCommand.ExecuteScalar() et SqliteDataAdapter.Fill (tableau) jetteront exceptions qui disent que la table n'existe pas:
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
Est-ce comportement attendu MonoDroid? Devrions-nous perdre les tables après avoir redéployé l'application? Comment devrions-nous utiliser SqliteDataAdapter.Fill()?
Merci
Avez-vous essayé d'extraire le fichier de base de données de l'appareil et de l'ouvrir dans un navigateur de base de données pour voir si la table existe? –
Je n'avais pas encore essayé. Je viens de l'essayer maintenant, les tables n'existent pas. – Joel