RepositorieSqlServer.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Dapper;
  2. using Microsoft.Data.SqlClient;
  3. using Newtonsoft.Json.Linq;
  4. using Quartz.Impl.AdoJobStore.Common;
  5. using System;
  6. using System.IO;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace Host.Repositories
  10. {
  11. public class RepositorieSqlServer : IRepositorie
  12. {
  13. private IDbProvider DBProvider { get; }
  14. public RepositorieSqlServer(IDbProvider dbProvider)
  15. {
  16. DBProvider = dbProvider;
  17. }
  18. public async Task<int> InitTable()
  19. {
  20. using (var connection = new SqlConnection(DBProvider.ConnectionString))
  21. {
  22. var check_sql = @"SELECT
  23. COUNT (1)
  24. FROM
  25. sys.tables
  26. WHERE
  27. name IN (
  28. 'QRTZ_BLOB_TRIGGERS',
  29. 'QRTZ_CALENDARS',
  30. 'QRTZ_CRON_TRIGGERS',
  31. 'QRTZ_FIRED_TRIGGERS',
  32. 'QRTZ_JOB_DETAILS',
  33. 'QRTZ_LOCKS',
  34. 'QRTZ_PAUSED_TRIGGER_GRPS',
  35. 'QRTZ_SCHEDULER_STATE',
  36. 'QRTZ_SIMPLE_TRIGGERS',
  37. 'QRTZ_SIMPROP_TRIGGERS',
  38. 'QRTZ_TRIGGERS'
  39. );";
  40. var count = await connection.QueryFirstOrDefaultAsync<int>(check_sql);
  41. //初始化 建表
  42. if (count == 0)
  43. {
  44. string init_sql = await File.ReadAllTextAsync("Tables/tables_sqlServer.sql");
  45. return await connection.ExecuteAsync(init_sql);
  46. }
  47. }
  48. return 0;
  49. }
  50. public async Task<bool> RemoveErrLogAsync(string jobGroup, string jobName)
  51. {
  52. try
  53. {
  54. using (var connection = new SqlConnection(DBProvider.ConnectionString))
  55. {
  56. string sql = $@"SELECT
  57. JOB_DATA
  58. FROM
  59. QRTZ_JOB_DETAILS
  60. WHERE
  61. JOB_NAME = @jobName
  62. AND JOB_GROUP = @jobGroup";
  63. var byteArray = await connection.ExecuteScalarAsync<byte[]>(sql, new { jobName, jobGroup });
  64. var jsonStr = Encoding.Default.GetString(byteArray);
  65. JObject source = JObject.Parse(jsonStr);
  66. source.Remove("Exception");//移除异常日志
  67. var modifySql = $@"UPDATE QRTZ_JOB_DETAILS
  68. SET JOB_DATA = @jobData
  69. WHERE
  70. JOB_NAME = @jobName
  71. AND JOB_GROUP = @jobGroup";
  72. await connection.ExecuteAsync(modifySql, new { jobName, jobGroup, jobData = Encoding.Default.GetBytes(source.ToString()) });
  73. }
  74. return true;
  75. }
  76. catch (Exception ex)
  77. {
  78. return false;
  79. }
  80. }
  81. }
  82. }