我们正在使用Visual Studio 2010,Monodroid和SQLite
我们在路径myContext.GetDatabasePath(“mydb.db3”)创建一个数据库。使用SqliteConnection.CreateFile(...)方法的AbsolutePath。
所以我们的连接字符串是“Data Source = / data / data / myapp.myapplication / databases / mydb.db3temp;”
我们创建一个表并使用SqliteCommand.ExecuteNonQuery()插入几个记录。
我们可以在插入后立即使用SqliteCommand.ExecuteScalar()运行select查询。
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()?
由于
答案 0 :(得分:3)
默认情况下,在Android上卸载应用时,您创建的文件会被删除。在Visual Studio中,转到Tools-&gt; Options-&gt; Mono for Android并启用“在应用程序部署之间保留数据”。这将传递一个标志进行卸载,告诉它将数据留在设备上。