2012-03-12 75 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显示“内存不足”错误。

希望这可以帮助与我相同问题的人。