2012-03-12 71 views
0

我一直在使用SQLite for Windows Phone(http://wp7sqlite.codeplex.com/)試圖對我做的兩個表執行SELECT操作。當我試圖這樣做時,一旦我打電話給cmd.ExecuteReader(),我得到了「內存不足」異常。用於Windows Phone的C#SQLite「內存不足」錯誤

下面的代碼WP7/C#代碼:

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) 

任何幫助,將不勝感激。

回答

2

我終於設法讓它工作。對於需要解決方案的人員,請重新檢查列中是否存在數據庫和/或數據庫是否已正確創建。

我看到當我使用事務創建數據庫時,該數據庫實際上並不存在。我認爲交易失敗了,我正在查詢一個不存在的數據庫。以後我使用隔離存儲資源管理器工具從模擬器下載我創建的數據庫並進行雙重檢查。現在它的工作權利。

我不知道爲什麼當實際上問題是不存在的文件本身時,SQLite顯示「內存不足」錯誤。

希望這可以幫助與我相同問題的人。