Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

87 řádky
3.0KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. using System.Data.SQLite;
  6. namespace CSVDownloader.Store {
  7. class History {
  8. public DateTime date;
  9. public String agent;
  10. }
  11. class HistoryDAO : SQLite3, IHistoryDAO {
  12. private static readonly String tablename_ = "History";
  13. private static readonly String colname_date_ = "Datetime";
  14. private static readonly String colname_credit_agent_ = "CreditAgent";
  15. private static readonly String dir_ = "data";
  16. private static readonly String source_ = $"{dir_}/history.db";
  17. public HistoryDAO() {
  18. if (!Directory.Exists(dir_)) {
  19. Directory.CreateDirectory(dir_);
  20. }
  21. Open(source_);
  22. String sql_create_table = "" +
  23. $"CREATE TABLE IF NOT EXISTS {tablename_}(" +
  24. $"{colname_date_} TEXT NOT NULL," +
  25. $"{colname_credit_agent_} TEXT NOT NULL" +
  26. ");";
  27. using (var cmd = new SQLiteCommand(sql_create_table, conn_)) {
  28. cmd.ExecuteNonQuery();
  29. }
  30. }
  31. public void Save(Code.CreditAgent agent, DateTime datetime) {
  32. using (var cmd = conn_.CreateCommand()) {
  33. String replace_date = "@Datetime";
  34. String replace_credit_agent = "@CreditAgent";
  35. cmd.CommandText = $"insert into {tablename_} values ({replace_date},{replace_credit_agent});";
  36. String date_str = datetime.ToString();
  37. cmd.Parameters.Add(new SQLiteParameter(replace_date, date_str));
  38. cmd.Parameters.Add(new SQLiteParameter(replace_credit_agent, Code.CreditAgenciesMap.GetID(agent)));
  39. cmd.Prepare();
  40. cmd.ExecuteNonQuery();
  41. }
  42. }
  43. /// <summary>
  44. /// 直近の履歴を1つだけ取得する。
  45. /// </summary>
  46. /// <param name="agent"></param>
  47. /// <returns></returns>
  48. public List<History> GetHistory(Code.CreditAgent agent) {
  49. var list = new List<History>();
  50. using (var cmd = conn_.CreateCommand()) {
  51. String replace_credit_agent = "@CreditAgent";
  52. cmd.CommandText = $"select * from {tablename_} where {colname_credit_agent_} = {replace_credit_agent} order by {colname_date_} desc limit 1;";
  53. cmd.Parameters.Add(new SQLiteParameter(replace_credit_agent, Code.CreditAgenciesMap.GetID(agent)));
  54. cmd.Prepare();
  55. using (var reader = cmd.ExecuteReader()) {
  56. while (reader.Read()) {
  57. var ele = new History();
  58. ele.date = DateTime.Parse(reader[colname_date_].ToString());
  59. ele.agent = reader[colname_credit_agent_].ToString();
  60. list.Add(ele);
  61. }
  62. }
  63. }
  64. return list;
  65. }
  66. }
  67. }