C # SQLite для Windows Phone ошибка «недостаточно памяти» - PullRequest
0 голосов
/ 12 марта 2012

Я использую SQLite для Windows Phone (http://wp7sqlite.codeplex.com/), пытаясь сделать SELECT для двух созданных мной таблиц. Когда я пытался это сделать, когда я звонил cmd.ExecuteReader(), я получал "out"памяти "исключение.

Вот код WP7 / C # code:

SqliteConnection conexion = new SqliteConnection("Version=3,uri=file:Database.db");
SqliteCommand sql = conexion.CreateCommand();
sql.CommandText = "SELECT a, b FROM tableA, tableB where tableA.id=tableB.id";
SqliteDataReader res = sql.ExecuteReader();

Как только он выполняет ExecuteReader, он показывает" исключение нехватки памяти ". Вот трассировка стека:

Message=out of memory
StackTrace:
at Community.CsharpSqlite.SQLiteClient.SqliteCommand.GetNextStatement(String pzStart, String& pzTail, Vdbe& pStmt)
at Community.CsharpSqlite.SQLiteClient.SqliteCommand.ExecuteReader(CommandBehavior behavior, Boolean want_results, Int32& rows_affected)
at Community.CsharpSqlite.SQLiteClient.SqliteCommand.ExecuteReader(CommandBehavior behavior)
at Community.CsharpSqlite.SQLiteClient.SqliteCommand.ExecuteReader()
at Carretera.Selector..ctor()
at System.Reflection.RuntimeConstructorInfo.InternalInvoke(RuntimeConstructorInfo rtci, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
at System.Reflection.RuntimeConstructorInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
at System.Activator.InternalCreateInstance(Type type, Boolean nonPublic, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type)
at System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread(AsyncCallback userCallback, PageResourceContentLoaderAsyncResult result)
at System.Windows.Navigation.PageResourceContentLoader.<>c__DisplayClass4.<BeginLoad>b__0(Object args)
at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at System.Delegate.DynamicInvokeOne(Object[] args)
at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
at System.Delegate.DynamicInvoke(Object[] args)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 21 марта 2012

Наконец-то мне удалось заставить его работать. Для тех, кому нужно решение, перепроверьте, что столбцы действительно существуют в базе данных и / или база данных была создана правильно.

Я видел, когда я создавал базу данных с использованием транзакций, эта база данных фактически не существовала. Я думаю, что транзакция не удалась, и я запрашивал несуществующую БД. Позже я использовал инструмент Isolated Storage Explorer, чтобы загрузить из эмулятора созданную мною базу данных и дважды проверил ее. Теперь он работает правильно.

Я не знаю, почему SQLite показывает ошибку «недостаточно памяти», когда на самом деле проблема заключается в самом несуществующем файле.

Надеюсь, это может помочь кому-то с той же проблемой, что и я.

...