/// <summary> /// ピックアップにデータ登録を行う /// </summary> /// <param name="logID">対象のログID</param> private void RegistPickup(String logID) { if (String.IsNullOrWhiteSpace(logID)) { return; } using (var db = new SQLite(MASTER_PATH)) { db.Open(); var isCommit = false; try { db.BeginTransaction(); var ret = db.Select($"select * from pickup where log_id = {logID}"); if (ret.Count == 0) { db.Update($"insert into pickup(log_id) values({logID})"); } isCommit = true; } catch (Exception) { isCommit = false; } finally { db.EndTransaction(isCommit); } } }
/// <summary> /// webからのデータとDBのログ情報をマージして返す。 /// </summary> /// <param name="db">DBインスタンス</param> /// <param name="feedItems">feed項目一覧</param> /// <param name="masterID">DB上のマスターID</param> /// <returns>feed項目一覧</returns> private IEnumerable <FeedItem> GetFeedItemsToDB(SQLite db, IEnumerable <FeedItem> feedItems, Int32 masterID) { String sql = $"select * from log where master_id = {masterID}"; // RSS記事のページURLをもとに新規項目を取得する var registeredItem = CommFunc.GetLogItems(db, sql).ToList(); var urlHash = new HashSet <String>(registeredItem.Select(l => l.Link.AbsoluteUri)); var newItems = GetNewcomer(feedItems, urlHash); Boolean isCommit = false; db.BeginTransaction(); try { // 新規項目をDBに登録 LogUpdate(db, newItems, masterID); isCommit = true; } catch (Exception) { isCommit = false; } finally { db.EndTransaction(isCommit); } // DBに登録したので改めて取得する。 // ※ToArray()が無いと遅延評価の影響でサムネ読み込みに影響があるので注意 //return GetLogItems(db, masterID).ToArray(); return(CommFunc.GetLogItems(db, sql).ToArray()); }
public static void UpdateOverdueChildren() { DataTable dt = sqlite.GetDataTable(string.Format(("SELECT * FROM {0} WHERE {1} < '{2}'"), ListChild.TABLE_NAME, ListChild.FIELD_NAME_END_TIME, DateTime.Now.ToString(Global.TIME_FORMAT_STRING))); if (dt.Rows.Count > 0) { sqlite.BeginTransaction(); for (int i = 0; i < dt.Rows.Count; i++) { ListChild listChild = ListChild.GetListChildById(Convert.ToInt32(dt.Rows[i][ListChild.FIELD_NAME_ID])); if ((listChild.Mark != MarkType.Overdue) && (listChild.Mark != MarkType.Abandoned)) { listChild.Mark = MarkType.Overdue; UpdateListChild(listChild); } } sqlite.CommitTransaction(); } }
public override bool LoadDataFromFile(string parFile) { using (StreamReader streamReader = new StreamReader(parFile)) //Открываем файл для чтения) { string varHead = "insert into " + Path.GetFileNameWithoutExtension(parFile) + "(" + streamReader.ReadLine() + ") values "; db.BeginTransaction(); while (!streamReader.EndOfStream) { db.ExecuteNonQuery(varHead + "(" + streamReader.ReadLine() + ")"); } db.CommitTransaction(); return(true); } }
/// <summary> /// DBへの書き込み処理 /// </summary> /// <param name="sql">SQL文</param> /// <returns>書き込み成否</returns> public static Boolean DBCommit(String sql) { var isCommit = false; using (var db = new SQLite(MASTER_PATH)) { db.Open(); try { db.BeginTransaction(); db.Update(sql); isCommit = true; } catch (Exception) { isCommit = false; } finally { db.EndTransaction(isCommit); } } return(isCommit); }
/// <summary> /// サイト登録処理 /// </summary> /// <param name="url">webサイトURL</param> /// <param name="masterID">DB上のマスターID</param> /// <param name="title">サイト名</param> /// <returns>更新成功有無</returns> private Boolean InsertRSS(String url, out Int32 masterID, out String title) { masterID = ERROR_RESULT; // RSSを一度取得して有効か確かめる。 title = RSS.ReadFeedTitle(url); if (title == null) { MessageBox.Show("Failed to get information."); return(false); } var isCommit = false; using (var db = new SQLite(MASTER_PATH)) { db.Open(); // DB登録有無確認 if (SiteExists(db, url)) { MessageBox.Show("It is already registered."); } else { try { db.BeginTransaction(); masterID = SiteRegist(db, title, url); isCommit = true; } catch (Exception) { isCommit = false; } finally { db.EndTransaction(isCommit); } } } return(isCommit); }
/// <summary> /// 削除ボタン /// </summary> private void DelButton_Click(Object sender, RoutedEventArgs e) { if (!(this.FavEditBox.SelectedItem is RssSiteInfo item)) { return; } if (MessageBoxResult.Cancel == MessageBox.Show($"{item.SiteName}\r\nDelete RSS feed.", "message", MessageBoxButton.OKCancel)) { return; } using (var db = new SQLite(MASTER_PATH)) { db.Open(); db.BeginTransaction(); try { // pickupはほかのテーブルに依存するため先に削除処理を行う DeletePickupItem(db, item.ID); // rss_masterからの削除 db.Update($"delete from rss_master where id={item.ID}"); // logからの削除 db.Update($"delete from log where master_id={item.ID}"); // syncからの削除 db.Update($"delete from sync where master_id={item.ID}"); // コミット db.EndTransaction(true); } catch (Exception) { // ロールバック db.EndTransaction(false); } } // 表示から削除 this.FavEditBox.ItemsSource = GetEditItems(item.ID); }
public static void BeginTransaction() { sqlite.BeginTransaction(); }