SqlConnectionStringEx.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Diagnostics;
  6. using System.Security.Cryptography;
  7. namespace LJLib.SQLEX
  8. {
  9. internal static class SqlConnectionStringEx
  10. {
  11. public static SqlConnection NewSqlConnection(this string connectionString, bool pooling = false)
  12. {
  13. var builder = new SqlConnectionStringBuilder(connectionString);
  14. builder.Pooling = pooling;
  15. builder.PersistSecurityInfo = true;
  16. if (pooling)
  17. {
  18. builder.MaxPoolSize = 200;
  19. builder.MinPoolSize = 20;
  20. if (builder.ConnectTimeout < 30)
  21. {
  22. builder.ConnectTimeout = 30;
  23. }
  24. }
  25. var rslt = new SqlConnection(builder.ConnectionString);
  26. rslt.StateChange += (sender, args) =>
  27. {
  28. if (args.OriginalState == ConnectionState.Closed && args.CurrentState == ConnectionState.Open)
  29. {
  30. var cmd = (sender as SqlConnection).CreateCommand();
  31. cmd.CommandText = "set transaction isolation level READ UNCOMMITTED";
  32. cmd.ExecuteNonQuery();
  33. cmd.CommandText = "SET DEADLOCK_PRIORITY low";
  34. cmd.ExecuteNonQuery();
  35. }
  36. };
  37. return rslt;
  38. }
  39. public static SqlConnection NewSqlConnectionReadCommitted(this string connectionString, bool pooling = false)
  40. {
  41. var builder = new SqlConnectionStringBuilder(connectionString);
  42. builder.Pooling = pooling;
  43. builder.PersistSecurityInfo = true;
  44. var rslt = new SqlConnection(builder.ConnectionString);
  45. rslt.StateChange += (sender, args) =>
  46. {
  47. if (args.OriginalState == ConnectionState.Closed && args.CurrentState == ConnectionState.Open)
  48. {
  49. var cmd = (sender as SqlConnection).CreateCommand();
  50. cmd.CommandText = "set transaction isolation level READ COMMITTED";
  51. cmd.ExecuteNonQuery();
  52. cmd.CommandText = "SET DEADLOCK_PRIORITY low";
  53. cmd.ExecuteNonQuery();
  54. }
  55. };
  56. return rslt;
  57. }
  58. }
  59. }