TDengineProvider.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using SqlSugar.TDengineAdo;
  2. using System;
  3. using System.Data;
  4. using System.Data.Common;
  5. namespace SqlSugar.BzTDengineCore
  6. {
  7. public partial class TDengineProvider : AdoProvider
  8. {
  9. public TDengineProvider()
  10. {
  11. }
  12. public override IDbConnection Connection
  13. {
  14. get
  15. {
  16. if (_DbConnection == null)
  17. {
  18. try
  19. {
  20. var TDengineConnectionString = base.Context.CurrentConnectionConfig.ConnectionString;
  21. _DbConnection = new TDengineConnection(TDengineConnectionString);
  22. }
  23. catch (Exception)
  24. {
  25. throw;
  26. }
  27. }
  28. return _DbConnection;
  29. }
  30. set
  31. {
  32. _DbConnection = value;
  33. }
  34. }
  35. public override void BeginTran()
  36. {
  37. }
  38. public override void BeginTran(string transactionName)
  39. {
  40. }
  41. /// <summary>
  42. /// Only SqlServer
  43. /// </summary>
  44. /// <param name="iso"></param>
  45. /// <param name="transactionName"></param>
  46. public override void BeginTran(IsolationLevel iso, string transactionName)
  47. {
  48. }
  49. public override IDataAdapter GetAdapter()
  50. {
  51. return new TDengineDataAdapter();
  52. }
  53. public override DbCommand GetCommand(string sql, SugarParameter[] parameters)
  54. {
  55. TDengineCommand sqlCommand = new TDengineCommand(sql, (TDengineConnection)Connection);
  56. sqlCommand.CommandType = CommandType;
  57. sqlCommand.CommandTimeout = CommandTimeOut;
  58. //if (this.Transaction != null)
  59. //{
  60. // sqlCommand.Transaction = (TDengineTransaction)this.Transaction;
  61. //}
  62. if (parameters.HasValue())
  63. {
  64. IDataParameter[] ipars = ToIDbDataParameter(parameters);
  65. sqlCommand.Parameters.AddRange((TDengineParameter[])ipars);
  66. }
  67. CheckConnection();
  68. return sqlCommand;
  69. }
  70. public override void SetCommandToAdapter(IDataAdapter dataAdapter, DbCommand command)
  71. {
  72. ((TDengineDataAdapter)dataAdapter).SelectCommand = (TDengineCommand)command;
  73. }
  74. public static bool _IsIsNanosecond { get; set; }
  75. public static bool _IsMicrosecond { get; set; }
  76. /// <summary>
  77. /// if mysql return MySqlParameter[] pars
  78. /// if sqlerver return SqlParameter[] pars ...
  79. /// </summary>
  80. /// <param name="parameters"></param>
  81. /// <returns></returns>
  82. public override IDataParameter[] ToIDbDataParameter(params SugarParameter[] parameters)
  83. {
  84. if (parameters == null || parameters.Length == 0) return null;
  85. TDengineParameter[] result = new TDengineParameter[parameters.Length];
  86. int i = 0;
  87. foreach (var parameter in parameters)
  88. {
  89. if (parameter.Value == null) parameter.Value = DBNull.Value;
  90. if (parameter.Value is bool)
  91. {
  92. parameter.Value = parameter.Value?.ToString()?.ToLower();
  93. }
  94. var sqlParameter = new TDengineParameter(parameter.ParameterName, parameter.Value, parameter.DbType, 0);
  95. if (parameter.CustomDbType?.Equals(System.Data.DbType.DateTime2) == true || parameter.Value is DateTime && _IsMicrosecond)
  96. {
  97. sqlParameter.IsMicrosecond = true;
  98. }
  99. else if (parameter.CustomDbType?.Equals(typeof(Date19)) == true || parameter.Value is DateTime && _IsIsNanosecond)
  100. {
  101. sqlParameter.IsNanosecond = true;
  102. }
  103. else if (parameter.Value is DateTime && Context.CurrentConnectionConfig.ConnectionString.Contains("config_"))
  104. {
  105. _IsIsNanosecond = sqlParameter.IsNanosecond = Context.CurrentConnectionConfig.ConnectionString.Contains("config_ns");
  106. _IsMicrosecond = sqlParameter.IsMicrosecond = Context.CurrentConnectionConfig.ConnectionString.Contains("config_us");
  107. }
  108. result[i] = sqlParameter;
  109. i++;
  110. }
  111. return result;
  112. }
  113. }
  114. }