SqlConnectionExt.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. namespace Quadarax.Foundation.Core.Data.Extensions
  5. {
  6. public static class SqlConnectionExt
  7. {
  8. public static SqlDataReader Query(this SqlConnection owner, string query, params SqlParameter[] parameters)
  9. {
  10. if (owner == null)
  11. throw new ArgumentNullException(nameof(owner));
  12. if (string.IsNullOrEmpty(query))
  13. throw new ArgumentNullException(nameof(query));
  14. var command = owner.CreateCommand();
  15. command.CommandText = query;
  16. command.CommandType = CommandType.Text;
  17. if (parameters!=null)
  18. foreach (var par in parameters)
  19. command.Parameters.Add(par);
  20. return command.ExecuteReader(CommandBehavior.Default);
  21. }
  22. public static int Execute(this SqlConnection owner, string query, params SqlParameter[] parameters)
  23. {
  24. return Execute(owner, CommandType.Text, query, parameters);
  25. }
  26. public static int BatchExecute(this SqlConnection owner, string query, params SqlParameter[] parameters)
  27. {
  28. var result = 0;
  29. var sqlBatch = string.Empty;
  30. query += "\nGO"; // make sure last batch is executed.
  31. foreach (var line in query.Split(new string[] { "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries))
  32. {
  33. if (line.ToUpperInvariant().Trim() == "GO")
  34. {
  35. if (string.IsNullOrEmpty(sqlBatch)) continue;
  36. result = Execute(owner, sqlBatch, parameters);
  37. sqlBatch = string.Empty;
  38. }
  39. else
  40. {
  41. sqlBatch += line + "\n";
  42. }
  43. }
  44. return result;
  45. }
  46. public static int ExecuteSp(this SqlConnection owner, string query, params SqlParameter[] parameters)
  47. {
  48. return Execute(owner, CommandType.StoredProcedure, query, parameters);
  49. }
  50. public static TResult ExecuteScalar<TResult>(this SqlConnection owner,CommandType type, string query, params SqlParameter[] parameters)
  51. {
  52. if (owner == null)
  53. throw new ArgumentNullException(nameof(owner));
  54. if (string.IsNullOrEmpty(query))
  55. throw new ArgumentNullException(nameof(query));
  56. var command = owner.CreateCommand();
  57. command.CommandText = query;
  58. command.CommandType = type;
  59. if (parameters!=null)
  60. foreach (var par in parameters)
  61. command.Parameters.Add(par);
  62. return (TResult)command.ExecuteScalar();
  63. }
  64. public static int Execute(this SqlConnection owner, CommandType type, string query,
  65. params SqlParameter[] parameters)
  66. {
  67. if (owner == null)
  68. throw new ArgumentNullException(nameof(owner));
  69. if (string.IsNullOrEmpty(query))
  70. throw new ArgumentNullException(nameof(query));
  71. var command = new SqlCommand(query, owner);
  72. command.CommandType = type;
  73. if (parameters != null)
  74. foreach (var par in parameters)
  75. command.Parameters.Add(par);
  76. var result = command.ExecuteNonQuery();
  77. return result;
  78. }
  79. public static bool DatabasePropertyExists(this SqlConnection owner, string databaseProperty)
  80. {
  81. return ExecuteScalar<int>(owner, CommandType.Text, $"select count(*) FROM SYS.EXTENDED_PROPERTIES where name='{databaseProperty}' and class_desc = 'DATABASE'") > 0;
  82. }
  83. public static string DatabasePropertyGet(this SqlConnection owner, string databaseProperty)
  84. {
  85. if (DatabasePropertyExists(owner, databaseProperty))
  86. return ExecuteScalar<string>(owner, CommandType.Text, $"select [value] FROM SYS.EXTENDED_PROPERTIES where name='{databaseProperty}' and class_desc = 'DATABASE'");
  87. else
  88. return string.Empty;
  89. }
  90. public static bool DatabasePropertyAddOrUpdate(this SqlConnection owner, string databaseProperty, string value)
  91. {
  92. bool result;
  93. var spParams = new SqlParameter[]
  94. {
  95. new SqlParameter("@name", SqlDbType.VarChar) { Value = databaseProperty },
  96. new SqlParameter("@value", SqlDbType.VarChar) { Value = value },
  97. };
  98. if (DatabasePropertyExists(owner, databaseProperty))
  99. {
  100. result = ExecuteSp(owner, "sys.sp_updateextendedproperty", spParams) > 0;
  101. }
  102. else
  103. {
  104. result = ExecuteSp(owner, "sys.sp_addextendedproperty", spParams) > 0;
  105. }
  106. return result;
  107. }
  108. }
  109. }