System.EntryPointNotFoundException для метода SqlDataAdapter.Fill - PullRequest
1 голос
/ 30 ноября 2011

Мы одновременно разрабатываем приложения для Android и iPhone, и основной код (написанный на C #) распределяется между ними. Например, код инициализации базы данных SQLite одинаков в обоих приложениях, только с небольшими изменениями для размещения файловой структуры на каждой платформе. Следующий код работает в MonoTouch, но выдает исключение EntryPointNotFoundException в Mono для Android:

try
{
    System.Data.Common.DbDataAdapter adapter = new SqliteDataAdapter(selectCommand);
    retVal = adapter.Fill(dataSet);
}
catch (Exception exception)
{
    ...
}

Насколько я могу судить, объекты selectCommand и dataSet идентичны на обеих платформах. Трассировка сообщения и стека выглядит следующим образом:

> 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  /home/jon/Development/xamarin/mono/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLite3.cs:493 
  at Mono.Data.Sqlite.SqliteDataReader.GetSchemaTable (Boolean wantUniqueInfo, Boolean wantDefaultValue) [0x0042d] in /home/jon/Development/xamarin/mono/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteDa>taReader.cs:619 
  at Mono.Data.Sqlite.SqliteDataReader.GetSchemaTable () [0x00000] in /home/jon/Development/xamarin/mono/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteDataReader.cs:550 
  at System.Data.Common.DataAdapter.BuildSchema (IDataReader reader, System.Data.DataTable table, SchemaType schemaType, MissingSchemaAction missingSchAction, MissingMappingAction missingMapAction, System.Data.Common.DataTableMappingCollection dtMapping) [0x0003b] in /home/jon/Development/xamarin/mono/mcs/class/System.Data/System.Data.Common/DataAdapter.cs:284 
  at System.Data.Common.DataAdapter.BuildSchema (IDataReader reader, System.Data.DataTable table, SchemaType schemaType) [0x00000] in /home/jon/Development/xamarin/mono/mcs/class/System.Data/System.Data.Common/DataAdapter.cs:257 
  at System.Data.Common.DataAdapter.FillTable (System.Data.DataTable dataTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, System.Int32& counter) [0x00011] in /home/jon/Development/xamarin/mono/mcs/class/System.Data/System.Data.Common/DataAdapter.cs:428 
  at System.Data.Common.DataAdapter.FillInternal (System.Data.DataSet dataSet, System.String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) [0x0009b] in /home/jon/Development/xamarin/mono/mcs/class/System.Data/System.Data.Common/DataAdapter.cs:533 
  at System.Data.Common.DataAdapter.Fill (System.Data.DataSet dataSet, System.String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) [0x00000] in /home/jon/Development/xamarin/mono/mcs/class/System.Data/System.Data.Common/DataAdapter.cs:589 
  at System.Data.Common.DbDataAdapter.Fill (System.Data.DataSet dataSet, Int32 startRecord, Int32 maxRecords, System.String srcTable, IDbCommand command, CommandBehavior behavior) [0x0004e] in /home/jon/Development/xamarin/mono/mcs/class/System.Data/System.Data.Common/DbDataAdapter.cs:337 
  at System.Data.Common.DbDataAdapter.Fill (System.Data.DataSet dataSet) [0x00000] in /home/jon/Development/xamarin/mono/mcs/class/System.Data/System.Data.Common/DbDataAdapter.cs:265 
  at Core.Database.ServerCommunicate.FillDataSet (Core.Database.XCommand selectCommand, System.Data.DataSet& dataSet) [0x00013] in /Users/sstream6/sd/110/core/Asm/Db/Database/Server.cs:648 

Я проверил на обеих платформах, что база данных создана и установлено соединение. Кто-нибудь еще испытывал подобные проблемы?

1 Ответ

3 голосов
/ 30 ноября 2011

К сожалению, библиотека SQLite в Android не включает поддержку метода sqlite3_column_origin_name (), поэтому любые части Mono.Data.Sqlite, которые зависят от нее, могут выйти из строя.У Xamarin есть ошибка, отслеживаемая здесь для изменения реализации, чтобы обойти ограничение, но пока, насколько я знаю, пока нет временных рамок.

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