From 911855ece7d7108b834d8eece107c952bb54be0a Mon Sep 17 00:00:00 2001 From: Andrea Cattaneo Date: Thu, 27 Apr 2023 10:29:35 +0200 Subject: [PATCH] ACUtils.SqlDB2 1.0.0.142 - [bugfix] corretta gestione connessioni persistenti --- ACUtils.SqlDB2/ACUtils.SqlDB2.csproj | 4 +- ACUtils.SqlDB2/ConnectionWrapper.cs | 30 +++++++++++ ACUtils.SqlDB2/SqlDB2.cs | 75 +++++++++++++++++----------- 3 files changed, 78 insertions(+), 31 deletions(-) create mode 100644 ACUtils.SqlDB2/ConnectionWrapper.cs diff --git a/ACUtils.SqlDB2/ACUtils.SqlDB2.csproj b/ACUtils.SqlDB2/ACUtils.SqlDB2.csproj index 2d75f3f..8179c3a 100644 --- a/ACUtils.SqlDB2/ACUtils.SqlDB2.csproj +++ b/ACUtils.SqlDB2/ACUtils.SqlDB2.csproj @@ -5,8 +5,8 @@ Andrea Cattaneo true false - 1.0.0.141 - 1.0.0.141 + 1.0.0.142 + 1.0.0.142 Utility per interrogazione database DB2 it true diff --git a/ACUtils.SqlDB2/ConnectionWrapper.cs b/ACUtils.SqlDB2/ConnectionWrapper.cs new file mode 100644 index 0000000..7614261 --- /dev/null +++ b/ACUtils.SqlDB2/ConnectionWrapper.cs @@ -0,0 +1,30 @@ +using IBM.Data.DB2.iSeries; + +using System; + + +namespace ACUtils +{ + public class ConnectionWrapper : IDisposable + { + public readonly iDB2Connection Connection; + private bool _closeOnDispose; + public ConnectionWrapper(iDB2Connection connection, bool closeOnDispose = true) + { + this.Connection = connection; + _closeOnDispose = closeOnDispose; + } + + public void Dispose() + { + if (_closeOnDispose) + { + if (Connection?.State == System.Data.ConnectionState.Open) + { + Connection.Close(); + } + Connection?.Dispose(); + } + } + } +} diff --git a/ACUtils.SqlDB2/SqlDB2.cs b/ACUtils.SqlDB2/SqlDB2.cs index 57c8dc2..0ef6edb 100644 --- a/ACUtils.SqlDB2/SqlDB2.cs +++ b/ACUtils.SqlDB2/SqlDB2.cs @@ -15,9 +15,8 @@ public class SqlDB2 : IDisposable string ConnectionString; bool connectionPersist; bool useTransaction = false; - iDB2Transaction _transaction; - iDB2Connection _connection; - + private iDB2Transaction _transaction; + private iDB2Connection _connection; public SqlDB2(string connectionString, ILogger logger, bool connectionPersist = false) { ConnectionString = connectionString; @@ -52,11 +51,11 @@ public DataTable QueryDataTable(string queryString) public DataSet QueryDataSet(string queryString, params KeyValuePair>[] queryParams) { - using (iDB2Connection connection = GetConnection()) + using (var connection = GetConnection()) { try { - iDB2Command selectCommand = GenerateCommand(connection, queryString, queryParams); + iDB2Command selectCommand = GenerateCommand(connection.Connection, queryString, queryParams); iDB2DataAdapter adapter = new iDB2DataAdapter(selectCommand); DataSet ds = new DataSet(); // adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey @@ -77,11 +76,11 @@ public DataSet QueryDataSet(string queryString, params KeyValuePair[] queryParams) { - using (iDB2Connection connection = GetConnection()) + using (var connection = GetConnection()) { try { - iDB2Command selectCommand = GenerateCommand(connection, queryString, queryParams); + iDB2Command selectCommand = GenerateCommand(connection.Connection, queryString, queryParams); iDB2DataAdapter adapter = new iDB2DataAdapter(selectCommand); DataSet ds = new DataSet(); adapter.Fill(ds, "table"); @@ -101,7 +100,7 @@ public DataSet QueryDataSet(string queryString, params KeyValuePair(string queryString, params KeyValuePair[] queryParams) { - using (iDB2Connection connection = GetConnection()) + using (var connection = GetConnection()) { try { - iDB2Command selectCommand = GenerateCommand(connection, queryString, queryParams); + iDB2Command selectCommand = GenerateCommand(connection.Connection, queryString, queryParams); object value = selectCommand.ExecuteScalar(); try { @@ -172,7 +171,7 @@ public T QuerySingleValue(iDB2Connection connection, string queryString, para return (T)Convert.ChangeType(value, typeof(T)); } - public T QuerySingleValue(iDB2Connection connection, string queryString) + public T QuerySingleValue(ConnectionWrapper connection, string queryString) { iDB2Command selectCommand = GenerateCommand(connection, queryString); object value = selectCommand.ExecuteScalar(); @@ -185,7 +184,7 @@ public T QuerySingleValue(iDB2Connection connection, string queryString) public IEnumerable _queryReader(string queryString) { - using (iDB2Connection connection = GetConnection()) + using (var connection = GetConnection()) { using (iDB2DataReader reader = GenerateCommand(connection, queryString).ExecuteReader()) { @@ -209,9 +208,9 @@ public IEnumerable QueryReader(string queryString) public IEnumerable _queryReader(string queryString, params KeyValuePair[] queryParams) { - using (iDB2Connection connection = GetConnection()) + using (var connection = GetConnection()) { - using (iDB2DataReader reader = GenerateCommand(connection, queryString, queryParams).ExecuteReader()) + using (iDB2DataReader reader = GenerateCommand(connection.Connection, queryString, queryParams).ExecuteReader()) { while (reader.Read()) yield return reader; } @@ -252,7 +251,7 @@ public IEnumerable QueryReader(iDB2Connection connection, string } } - public IEnumerable _queryReader(iDB2Connection connection, string queryString) + public IEnumerable _queryReader(ConnectionWrapper connection, string queryString) { using (iDB2DataReader reader = GenerateCommand(connection, queryString).ExecuteReader()) { @@ -279,11 +278,11 @@ public IEnumerable QueryReader(iDB2Connection connection, string public bool Execute(string queryString, params KeyValuePair[] queryParams) { - using (iDB2Connection connection = GetConnection()) + using (var connection = GetConnection()) { try { - var selectCommand = GenerateCommand(connection, queryString, queryParams); + var selectCommand = GenerateCommand(connection.Connection, queryString, queryParams); var value = selectCommand.ExecuteNonQuery() > 0; return value; } @@ -301,11 +300,11 @@ public bool Execute(string queryString, params KeyValuePair[] qu public bool Execute(string queryString, params KeyValuePair>[] queryParams) { - using (iDB2Connection connection = GetConnection()) + using (var connection = GetConnection()) { try { - var selectCommand = GenerateCommand(connection, queryString, queryParams); + var selectCommand = GenerateCommand(connection.Connection, queryString, queryParams); var value = selectCommand.ExecuteNonQuery() > 0; return value; } @@ -323,7 +322,7 @@ public bool Execute(string queryString, params KeyValuePair