public SQLiteResultSet Execute(string query) { SQLiteResultSet set1 = new SQLiteResultSet(); lock (typeof(SQLiteClient)) { //Log.Info("dbs:{0} sql:{1}", databaseName,query); if (query == null) { Log.Error("SQLiteClient: query==null"); return(set1); } if (query.Length == 0) { Log.Error("SQLiteClient: query==''"); return(set1); } IntPtr errMsg; //string msg = ""; SqliteError err; set1.LastCommand = query; try { IntPtr pVm; IntPtr pzTail; err = sqlite3_prepare16(dbHandle, query, query.Length * 2, out pVm, out pzTail); if (err == SqliteError.OK) { ReadpVm(query, set1, ref pVm); } if (pVm == IntPtr.Zero) { ThrowError("sqlite3_prepare16:pvm=null", query, err); } err = sqlite3_finalize(pVm, out errMsg); } finally {} if (err != SqliteError.OK) { Log.Error("SQLiteClient: query returned {0} {1}", err.ToString(), query); ThrowError("sqlite3_finalize", query, err); } } return(set1); }
public bool AssignAllSongFieldsFromResultSet(ref Song aSong, SQLiteResultSet aResult, int aRow) { if (aSong == null || aResult == null || aResult.Rows.Count < 1) { return false; } aSong.Id = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.idTrack"); aSong.FileName = DatabaseUtility.Get(aResult, aRow, "tracks.strPath"); aSong.Artist = DatabaseUtility.Get(aResult, aRow, "tracks.strArtist").Trim(trimChars); aSong.AlbumArtist = DatabaseUtility.Get(aResult, aRow, "tracks.strAlbumArtist").Trim(trimChars); aSong.Album = DatabaseUtility.Get(aResult, aRow, "tracks.strAlbum"); aSong.Genre = DatabaseUtility.Get(aResult, aRow, "tracks.strGenre").Trim(trimChars); aSong.Title = DatabaseUtility.Get(aResult, aRow, "tracks.strTitle"); aSong.Track = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iTrack"); aSong.TrackTotal = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iNumTracks"); aSong.Duration = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iDuration"); aSong.Year = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iYear"); aSong.TimesPlayed = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iTimesPlayed"); aSong.Rating = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iRating"); aSong.Favorite = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iFavorite") != 0; aSong.ResumeAt = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iResumeAt"); aSong.DiscId = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iDisc"); aSong.DiscTotal = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iNumDisc"); aSong.Lyrics = DatabaseUtility.Get(aResult, aRow, "tracks.strLyrics"); aSong.Composer = DatabaseUtility.Get(aResult, aRow, "tracks.strComposer").Trim(trimChars); aSong.Conductor = DatabaseUtility.Get(aResult, aRow, "tracks.strConductor").Trim(trimChars); aSong.Comment = DatabaseUtility.Get(aResult, aRow, "tracks.strComment").Trim(trimChars); aSong.FileType = DatabaseUtility.Get(aResult, aRow, "tracks.strFileType").Trim(trimChars); aSong.Codec = DatabaseUtility.Get(aResult, aRow, "tracks.strFullCodec").Trim(trimChars); aSong.BitRateMode = DatabaseUtility.Get(aResult, aRow, "tracks.strBitRateMode").Trim(trimChars); aSong.BPM = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iBPM"); aSong.BitRate = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iBitRate"); aSong.Channels = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iChannels"); aSong.SampleRate = DatabaseUtility.GetAsInt(aResult, aRow, "tracks.iSampleRate"); try { aSong.DateTimePlayed = DatabaseUtility.GetAsDateTime(aResult, aRow, "dateLastPlayed"); aSong.DateTimeModified = DatabaseUtility.GetAsDateTime(aResult, aRow, "dateAdded"); } catch (Exception ex) { Log.Warn("MusicDatabase Lookup: Exception parsing date fields: {0} stack: {1}", ex.Message, ex.StackTrace); } return true; }
private string Get(SQLiteResultSet results, int iRecord, string strColum) { if (null == results) { return ""; } if (results.Rows.Count < iRecord) { return ""; } SQLiteResultSet.Row arr = results.Rows[iRecord]; int iCol = 0; foreach (string columnName in results.ColumnNames) { if (strColum == columnName) { string strLine = arr.fields[iCol].Trim(); strLine = strLine.Replace("''", "'"); return strLine; } iCol++; } return ""; }
public DatabaseResultSetAdapter(SQLiteResultSet adaptee) { _adaptee = adaptee; }
// Loads data into this object based on the given database record. public void LoadByRow(SQLiteResultSet.Row row) { RetrievalInProcess = true; ReadOnlyCollection<DBField> fieldList = DBField.GetFieldList(this.GetType()); // load each field one at a time. they should have been retrieved in the // ordering in FieldList int i; for (i = 0; i < fieldList.Count; i++) { if (row.fields[i] == "") fieldList[i].SetValue(this, null); else fieldList[i].SetValue(this, row.fields[i]); } // id is always at the end, assign that too id = int.Parse(row.fields[i]); // all values are in sync with DB so no commit needed. commitNeeded = false; RetrievalInProcess = false; }
private void SetMovieDetails(ref IMDBMovie details, int iRow, SQLiteResultSet results) { double rating = 0; Double.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.fRating"), out rating); details.Rating = (float)rating; if (details.Rating > 10.0f) { details.Rating /= 10.0f; } details.Director = DatabaseUtility.Get(results, iRow, "movieinfo.strDirector").Replace("''", "'"); // Add directorID try { details.DirectorID = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.idDirector")); } catch (Exception) { details.DirectorID = -1; } details.WritingCredits = DatabaseUtility.Get(results, iRow, "movieinfo.strCredits").Replace("''", "'"); details.TagLine = DatabaseUtility.Get(results, iRow, "movieinfo.strTagLine").Replace("''", "'"); details.PlotOutline = DatabaseUtility.Get(results, iRow, "movieinfo.strPlotOutline").Replace("''", "'"); details.Plot = DatabaseUtility.Get(results, iRow, "movieinfo.strPlot").Replace("''", "'"); // Added user review details.UserReview = DatabaseUtility.Get(results, iRow, "movieinfo.strUserReview").Replace("''", "'"); details.Votes = DatabaseUtility.Get(results, iRow, "movieinfo.strVotes"); details.Cast = DatabaseUtility.Get(results, iRow, "movieinfo.strCast").Replace("''", "'"); details.Year = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.iYear")); details.Genre = DatabaseUtility.Get(results, iRow, "movieinfo.strGenre").Trim(); details.ThumbURL = DatabaseUtility.Get(results, iRow, "movieinfo.strPictureURL"); // Fanart details.FanartURL = DatabaseUtility.Get(results, iRow, "movieinfo.strFanartURL"); // Date Added details.DateAdded = DatabaseUtility.Get(results, iRow, "movieinfo.dateAdded"); // Date Watched details.DateWatched = DatabaseUtility.Get(results, iRow, "movieinfo.dateWatched"); details.Title = DatabaseUtility.Get(results, iRow, "movieinfo.strTitle").Replace("''", "'"); details.Path = DatabaseUtility.Get(results, iRow, "path.strPath"); details.DVDLabel = DatabaseUtility.Get(results, iRow, "movie.discid"); details.IMDBNumber = DatabaseUtility.Get(results, iRow, "movieinfo.IMDBID"); Int32 lMovieId = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.idMovie")); details.SearchString = String.Format("{0}", details.Title); details.CDLabel = DatabaseUtility.Get(results, iRow, "path.cdlabel"); details.MPARating = DatabaseUtility.Get(results, iRow, "movieinfo.mpaa"); int runtime = 0; Int32.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.runtime"), out runtime); details.RunTime = runtime; int watched = 0; Int32.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.iswatched"), out watched); details.Watched = watched; details.ID = lMovieId; details.Studios = DatabaseUtility.Get(results, iRow, "movieinfo.studios"); details.Country = DatabaseUtility.Get(results, iRow, "movieinfo.country"); details.Language = DatabaseUtility.Get(results, iRow, "movieinfo.language"); details.LastUpdate = DatabaseUtility.Get(results, iRow, "movieinfo.lastupdate"); }
public static string Get(SQLiteResultSet results, int iRecord, string strColum) { if (null == results) { return string.Empty; } if (results.Rows.Count == 0) { return string.Empty; } if (results.Rows.Count < iRecord) { return string.Empty; } SQLiteResultSet.Row arr = results.Rows[iRecord]; int iCol = 0; if (results.ColumnIndices.ContainsKey(strColum)) { iCol = (int)results.ColumnIndices[strColum]; if (arr.fields[iCol] == null) { return string.Empty; } string strLine = (arr.fields[iCol]).Trim(); //strLine = strLine.Replace("''","'"); return strLine; } int pos = strColum.IndexOf("."); if (pos < 0) { return string.Empty; } strColum = strColum.Substring(pos + 1); if (results.ColumnIndices.ContainsKey(strColum)) { iCol = (int)results.ColumnIndices[strColum]; if (arr.fields[iCol] == null) { return string.Empty; } string strLine = (arr.fields[iCol]).Trim(); //strLine = strLine.Replace("''","'"); return strLine; } return string.Empty; }
public static string Get(SQLiteResultSet results, int iRecord, int column) { if (null == results) { return string.Empty; } if (results.Rows.Count < iRecord) { return string.Empty; } if (column < 0 || column >= results.ColumnNames.Count) { return string.Empty; } SQLiteResultSet.Row arr = results.Rows[iRecord]; if (arr.fields[column] == null) { return string.Empty; } string strLine = (arr.fields[column]).Trim(); //strLine = strLine.Replace("''","'"); return strLine; ; }
internal void ReadpVm(string query, SQLiteResultSet set1, ref IntPtr pVm) { int pN; SqliteError res = SqliteError.ERROR; if (pVm == IntPtr.Zero) { ThrowError("SQLiteClient: pvm=null", query, res); } DateTime now = DateTime.Now; TimeSpan ts = now - DateTime.Now; while (true && ts.TotalSeconds > -15) { res = sqlite3_step(pVm); pN = sqlite3_column_count(pVm); /* if (res == SqliteError.ERROR) { ThrowError("sqlite3_step", query, res); } */ if (res == SqliteError.DONE) { break; } // when resuming from hibernation or standby and where the db3 files are located on a network drive, we often end up in a neverending loop // while (true)...it never exits. and the app is hanging. // Lets handle it by disconnecting the DB, and then reconnect. if (res == SqliteError.BUSY || res == SqliteError.ERROR) { this.Close(); dbHandle = IntPtr.Zero; // bool res2 = WaitForFile(this.DBName); SqliteError err = (SqliteError)sqlite3_open16(this.DBName, out dbHandle); if (err != SqliteError.OK) { throw new SQLiteException(string.Format("Failed to re-open database, SQLite said: {0} {1}", DBName, err.ToString())); } else { IntPtr pzTail; err = sqlite3_prepare16(dbHandle, query, query.Length * 2, out pVm, out pzTail); res = sqlite3_step(pVm); pN = sqlite3_column_count(pVm); if (pVm == IntPtr.Zero) { ThrowError("sqlite3_prepare16:pvm=null", query, err); } } } // We have some data; lets read it if (set1.ColumnNames.Count == 0) { for (int i = 0; i < pN; i++) { string colName; IntPtr pName = sqlite3_column_name16(pVm, i); if (pName == IntPtr.Zero) { ThrowError(String.Format("SqlClient:sqlite3_column_name16() returned null {0}/{1}", i, pN), query, res); } colName = Marshal.PtrToStringUni(pName); set1.columnNames.Add(colName); set1.ColumnIndices[colName] = i; } } SQLiteResultSet.Row row = new SQLiteResultSet.Row(); for (int i = 0; i < pN; i++) { string colData = ""; IntPtr pName = sqlite3_column_text16(pVm, i); if (pName != IntPtr.Zero) { colData = Marshal.PtrToStringUni(pName); } row.fields.Add(colData); } set1.Rows.Add(row); ts = now - DateTime.Now; } if (res == SqliteError.BUSY || res == SqliteError.ERROR) { ThrowError("sqlite3_step", query, res); } }
internal void ReadpVm(string query, SQLiteResultSet set1, ref IntPtr pVm) { int pN; SqliteError res = SqliteError.ERROR; if (pVm == IntPtr.Zero) { ThrowError("SQLiteClient: pvm=null", query, res); } DateTime now = DateTime.Now; TimeSpan ts = now - DateTime.Now; while (true && ts.TotalSeconds > -15) { for (int i = 0; i <= busyRetries; i++) { res = sqlite3_step(pVm); if (res == SqliteError.LOCKED || res == SqliteError.BUSY) { Thread.Sleep(busyRetryDelay); } else { if (i > 0) { Log.Debug("SqlClient: database was busy (Available after " + (i + 1) + " retries)"); } break; } } pN = sqlite3_column_count(pVm); /* * if (res == SqliteError.ERROR) * { * ThrowError("sqlite3_step", query, res); * } */ if (res == SqliteError.DONE) { break; } // when resuming from hibernation or standby and where the db3 files are located on a network drive, we often end up in a neverending loop // while (true)...it never exits. and the app is hanging. // Lets handle it by disconnecting the DB, and then reconnect. if (res == SqliteError.BUSY || res == SqliteError.ERROR) { this.Close(); dbHandle = IntPtr.Zero; // bool res2 = WaitForFile(this.DBName); SqliteError err = (SqliteError)sqlite3_open16(this.DBName, out dbHandle); if (err != SqliteError.OK) { throw new SQLiteException(string.Format("Failed to re-open database, SQLite said: {0} {1}", DBName, err.ToString())); } else { IntPtr pzTail; err = sqlite3_prepare16(dbHandle, query, query.Length * 2, out pVm, out pzTail); res = sqlite3_step(pVm); pN = sqlite3_column_count(pVm); if (pVm == IntPtr.Zero) { ThrowError("sqlite3_prepare16:pvm=null", query, err); } } } // We have some data; lets read it if (set1.ColumnNames.Count == 0) { for (int i = 0; i < pN; i++) { string colName; IntPtr pName = sqlite3_column_name16(pVm, i); if (pName == IntPtr.Zero) { ThrowError(String.Format("SqlClient:sqlite3_column_name16() returned null {0}/{1}", i, pN), query, res); } colName = Marshal.PtrToStringUni(pName); set1.columnNames.Add(colName); set1.ColumnIndices[colName] = i; } } SQLiteResultSet.Row row = new SQLiteResultSet.Row(); for (int i = 0; i < pN; i++) { string colData = ""; IntPtr pName = sqlite3_column_text16(pVm, i); if (pName != IntPtr.Zero) { colData = Marshal.PtrToStringUni(pName); } row.fields.Add(colData); } set1.Rows.Add(row); ts = now - DateTime.Now; } if (res == SqliteError.BUSY || res == SqliteError.ERROR) { ThrowError("sqlite3_step", query, res); } }
public static long GetAsInt64(SQLiteResultSet results, int iRecord, int column) { string result = Get(results, iRecord, column); try { long longValue = Int64.Parse(result); return longValue; } catch (Exception) {} return 0; }
public static int GetAsInt(SQLiteResultSet results, int iRecord, int column) { string result = Get(results, iRecord, column); try { int intValue = Int32.Parse(result); return intValue; } catch (Exception) {} return 0; }
public static int GetAsInt(SQLiteResultSet results, int iRecord, string strColum) { string result = Get(results, iRecord, strColum); if (result == null) { return 0; } if (result.Length == 0) { return 0; } int returnValue = -1; try { //Remove decimal from string try { if (result.Length > 1) { int slashPos = result.IndexOf(".", StringComparison.Ordinal); if (slashPos > 0) { result = result.Substring(0, result.IndexOf('.', 0)); } } } catch (Exception) { // Can't convert or remove decimal from the string } int numValue; bool parsed = Int32.TryParse(result, out numValue); if (parsed) { returnValue = Int32.Parse(result); } } catch (Exception) { Log.Info("DatabaseUtility:GetAsInt() column:{0} record:{1} value:{2} is not an int", strColum, iRecord, result); } return returnValue; }
public bool Read(SQLiteResultSet.Row row, System.Collections.Hashtable ColumnIndices) { if (row == null || row.fields.Count == 0) return false; string res = null; int iCol = 0; foreach (KeyValuePair<string, DBField> field in m_fields) { object o = null; if (((o = ColumnIndices[field.Key]) != null) || ((o = ColumnIndices[m_tableName + "." + field.Key]) != null) || ((o = ColumnIndices[m_tableName + field.Key]) != null)) // because of order bug in sqlite { iCol = (int)o; res = row.fields[iCol]; field.Value.Value = res == null ? string.Empty : res; } else // we have a column in mfields that is not in the database result (or null), as such it is to be empty field.Value.Value = string.Empty; } m_CommitNeeded = false; return true; }
public bool Read(ref SQLiteResultSet records, int index) { if (records.Rows.Count > 0 || records.Rows.Count < index) { SQLiteResultSet.Row row = records.Rows[index]; return Read(row, records.ColumnIndices); } return false; }
private void SetMovieDetails(ref IMDBMovie details, int iRow, SQLiteResultSet results) { if (details == null || iRow < 0 || results == null) { return; } double rating = 0; Double.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.fRating"), out rating); details.Rating = (float)rating; if (details.Rating > 10.0f) { details.Rating /= 10.0f; } details.Director = DatabaseUtility.Get(results, iRow, "movieinfo.strDirector").Replace("''", "'"); // Add directorID try { details.DirectorID = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.idDirector")); } catch (Exception) { details.DirectorID = -1; } details.WritingCredits = DatabaseUtility.Get(results, iRow, "movieinfo.strCredits").Replace("''", "'"); details.TagLine = DatabaseUtility.Get(results, iRow, "movieinfo.strTagLine").Replace("''", "'"); details.PlotOutline = DatabaseUtility.Get(results, iRow, "movieinfo.strPlotOutline").Replace("''", "'"); details.Plot = DatabaseUtility.Get(results, iRow, "movieinfo.strPlot").Replace("''", "'"); // Added user review details.UserReview = DatabaseUtility.Get(results, iRow, "movieinfo.strUserReview").Replace("''", "'"); details.Votes = DatabaseUtility.Get(results, iRow, "movieinfo.strVotes"); details.Cast = DatabaseUtility.Get(results, iRow, "movieinfo.strCast").Replace("''", "'"); details.Year = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.iYear")); details.Genre = DatabaseUtility.Get(results, iRow, "movieinfo.strGenre").Trim(); details.ThumbURL = DatabaseUtility.Get(results, iRow, "movieinfo.strPictureURL"); // Fanart details.FanartURL = DatabaseUtility.Get(results, iRow, "movieinfo.strFanartURL"); // Date Added details.DateAdded = DatabaseUtility.Get(results, iRow, "movieinfo.dateAdded"); // Date Watched details.DateWatched = DatabaseUtility.Get(results, iRow, "movieinfo.dateWatched"); details.Title = DatabaseUtility.Get(results, iRow, "movieinfo.strTitle").Replace("''", "'"); details.Path = DatabaseUtility.Get(results, iRow, "path.strPath"); details.DVDLabel = DatabaseUtility.Get(results, iRow, "movie.discid"); details.IMDBNumber = DatabaseUtility.Get(results, iRow, "movieinfo.IMDBID"); Int32 lMovieId = Int32.Parse(DatabaseUtility.Get(results, iRow, "movieinfo.idMovie")); details.SearchString = String.Format("{0}", details.Title); details.CDLabel = DatabaseUtility.Get(results, iRow, "path.cdlabel"); details.MPARating = DatabaseUtility.Get(results, iRow, "movieinfo.mpaa"); int runtime = 0; Int32.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.runtime"), out runtime); details.RunTime = runtime; int watched = 0; Int32.TryParse(DatabaseUtility.Get(results, iRow, "movieinfo.iswatched"), out watched); details.Watched = watched; details.ID = lMovieId; details.Studios = DatabaseUtility.Get(results, iRow, "movieinfo.studios"); details.Country = DatabaseUtility.Get(results, iRow, "movieinfo.country"); details.Language = DatabaseUtility.Get(results, iRow, "movieinfo.language"); details.LastUpdate = DatabaseUtility.Get(results, iRow, "movieinfo.lastupdate"); details.SortTitle = DatabaseUtility.Get(results, iRow, "movieinfo.strSortTitle").Replace("''", "'"); if (string.IsNullOrEmpty(details.Path) && details.ID > 0) { string strSQL = String.Format( "SELECT path.strPath FROM movie,path WHERE path.idpath=movie.idpath AND movie.idMovie = {0}", details.ID); results = m_db.Execute(strSQL); details.Path = DatabaseUtility.Get(results, 0, "path.strPath"); } if (details.ID > 0) { int percent = 0; int watchedCount = 0; GetMovieWatchedStatus(details.ID, out percent, out watchedCount); details.WatchedPercent = percent; details.WatchedCount = watchedCount; string movieFilename = string.Empty; ArrayList files = new ArrayList(); GetFilesForMovie(details.ID, ref files); int duration = GetMovieDuration(details.ID); details.Duration = duration; if (files.Count > 0) { movieFilename = (string) files[0]; } details.VideoFileName = movieFilename; details.VideoFilePath = details.Path; VideoFilesMediaInfo mInfo = new VideoFilesMediaInfo(); GetVideoFilesMediaInfo(movieFilename, ref mInfo, false); details.MediaInfo = mInfo; } }
public static long GetAsInt64(SQLiteResultSet results, int iRecord, string strColum) { string result = Get(results, iRecord, strColum); if (result == null) { return 0; } if (result.Length == 0) { return 0; } long returnValue = -1; try { returnValue = Int64.Parse(result); } catch (Exception) { Log.Info("DatabaseUtility:GetAsInt64() column:{0} record:{1} value:{2} is not an Int64", strColum, iRecord, result); } return returnValue; }
public static DateTime GetAsDateTime(SQLiteResultSet results, int iRecord, string aTimestampColum) { DateTime finalResult = DateTime.MinValue; if (results == null || string.IsNullOrEmpty(aTimestampColum) || results.Rows.Count < 1 || results.Rows.Count < iRecord) { return finalResult; } try { SQLiteResultSet.Row arr = results.Rows[iRecord]; int iCol = 0; if (results.ColumnIndices.ContainsKey(aTimestampColum)) { iCol = (int)results.ColumnIndices[aTimestampColum]; if (arr.fields[iCol] != null) { finalResult = Convert.ToDateTime((arr.fields[iCol])); } } } catch (Exception) {} return finalResult; }
public ArrayList GetColumn(string query, int column) { SQLiteResultSet set1 = Execute(query); return(set1.GetColumn(column)); }
public SQLiteResultSet Execute(string query) { SQLiteResultSet set1 = new SQLiteResultSet(); lock (typeof (SQLiteClient)) { //Log.Info("dbs:{0} sql:{1}", databaseName,query); if (query == null) { Log.Error("SQLiteClient: query==null"); return set1; } if (query.Length == 0) { Log.Error("SQLiteClient: query==''"); return set1; } IntPtr errMsg; //string msg = ""; SqliteError err; set1.LastCommand = query; try { IntPtr pVm; IntPtr pzTail; err = sqlite3_prepare16(dbHandle, query, query.Length * 2, out pVm, out pzTail); if (err == SqliteError.OK) { ReadpVm(query, set1, ref pVm); } if (pVm == IntPtr.Zero) { ThrowError("sqlite3_prepare16:pvm=null", query, err); } err = sqlite3_finalize(pVm, out errMsg); } finally {} if (err != SqliteError.OK) { Log.Error("SQLiteClient: query returned {0} {1}", err.ToString(), query); ThrowError("sqlite3_finalize", query, err); } } return set1; }