using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Data.SQLite; namespace CSVDownloader.Store { class History { public DateTime date; public String agent; } class HistoryDAO : SQLite3, IHistoryDAO { private static readonly String tablename_ = "History"; private static readonly String colname_date_ = "Datetime"; private static readonly String colname_credit_agent_ = "CreditAgent"; private static readonly String dir_ = "data"; private static readonly String source_ = $"{dir_}/history.db"; public HistoryDAO() { if (!Directory.Exists(dir_)) { Directory.CreateDirectory(dir_); } Open(source_); String sql_create_table = "" + $"CREATE TABLE IF NOT EXISTS {tablename_}(" + $"{colname_date_} TEXT NOT NULL," + $"{colname_credit_agent_} TEXT NOT NULL" + ");"; using (var cmd = new SQLiteCommand(sql_create_table, conn_)) { cmd.ExecuteNonQuery(); } } public void Save(Code.CreditAgent agent, DateTime datetime) { using (var cmd = conn_.CreateCommand()) { String replace_date = "@Datetime"; String replace_credit_agent = "@CreditAgent"; cmd.CommandText = $"insert into {tablename_} values ({replace_date},{replace_credit_agent});"; String date_str = datetime.ToString(); cmd.Parameters.Add(new SQLiteParameter(replace_date, date_str)); cmd.Parameters.Add(new SQLiteParameter(replace_credit_agent, Code.CreditAgenciesMap.GetID(agent))); cmd.Prepare(); cmd.ExecuteNonQuery(); } } /// /// 直近の履歴を1つだけ取得する。 /// /// /// public List GetHistory(Code.CreditAgent agent) { var list = new List(); using (var cmd = conn_.CreateCommand()) { String replace_credit_agent = "@CreditAgent"; cmd.CommandText = $"select * from {tablename_} where {colname_credit_agent_} = {replace_credit_agent} order by {colname_date_} desc limit 1;"; cmd.Parameters.Add(new SQLiteParameter(replace_credit_agent, Code.CreditAgenciesMap.GetID(agent))); cmd.Prepare(); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { var ele = new History(); ele.date = DateTime.Parse(reader[colname_date_].ToString()); ele.agent = reader[colname_credit_agent_].ToString(); list.Add(ele); } } } return list; } } }