Skip to content

Commit

Permalink
ACUtils.SqlDB2 1.0.0.142 - [bugfix] corretta gestione connessioni per…
Browse files Browse the repository at this point in the history
…sistenti
  • Loading branch information
acattaneo-bitagora committed Apr 27, 2023
1 parent f10b1dc commit 911855e
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 31 deletions.
4 changes: 2 additions & 2 deletions ACUtils.SqlDB2/ACUtils.SqlDB2.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
<Authors>Andrea Cattaneo</Authors>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<Version>1.0.0.141</Version>
<PackageVersion>1.0.0.141</PackageVersion>
<Version>1.0.0.142</Version>
<PackageVersion>1.0.0.142</PackageVersion>
<Description>Utility per interrogazione database DB2</Description>
<NeutralLanguage>it</NeutralLanguage>
<IncludeSymbols>true</IncludeSymbols>
Expand Down
30 changes: 30 additions & 0 deletions ACUtils.SqlDB2/ConnectionWrapper.cs
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
}
75 changes: 46 additions & 29 deletions ACUtils.SqlDB2/SqlDB2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -52,11 +51,11 @@ public DataTable QueryDataTable(string queryString)

public DataSet QueryDataSet(string queryString, params KeyValuePair<string, KeyValuePair<iDB2DbType, object>>[] 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
Expand All @@ -77,11 +76,11 @@ public DataSet QueryDataSet(string queryString, params KeyValuePair<string, KeyV

public DataSet QueryDataSet(string queryString, params KeyValuePair<string, object>[] 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");
Expand All @@ -101,7 +100,7 @@ public DataSet QueryDataSet(string queryString, params KeyValuePair<string, obje

public DataSet QueryDataSet(string queryString)
{
using (iDB2Connection connection = GetConnection())
using (var connection = GetConnection())
{
try
{
Expand Down Expand Up @@ -138,11 +137,11 @@ public DataRow QueryDataRow(string queryString, params KeyValuePair<string, obje
#region QuerySingleValue
public T QuerySingleValue<T>(string queryString, params KeyValuePair<string, object>[] 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
{
Expand Down Expand Up @@ -172,7 +171,7 @@ public T QuerySingleValue<T>(iDB2Connection connection, string queryString, para
return (T)Convert.ChangeType(value, typeof(T));
}

public T QuerySingleValue<T>(iDB2Connection connection, string queryString)
public T QuerySingleValue<T>(ConnectionWrapper connection, string queryString)
{
iDB2Command selectCommand = GenerateCommand(connection, queryString);
object value = selectCommand.ExecuteScalar();
Expand All @@ -185,7 +184,7 @@ public T QuerySingleValue<T>(iDB2Connection connection, string queryString)

public IEnumerable<iDB2DataReader> _queryReader(string queryString)
{
using (iDB2Connection connection = GetConnection())
using (var connection = GetConnection())
{
using (iDB2DataReader reader = GenerateCommand(connection, queryString).ExecuteReader())
{
Expand All @@ -209,9 +208,9 @@ public IEnumerable<iDB2DataReader> QueryReader(string queryString)

public IEnumerable<iDB2DataReader> _queryReader(string queryString, params KeyValuePair<string, object>[] 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;
}
Expand Down Expand Up @@ -252,7 +251,7 @@ public IEnumerable<iDB2DataReader> QueryReader(iDB2Connection connection, string
}
}

public IEnumerable<iDB2DataReader> _queryReader(iDB2Connection connection, string queryString)
public IEnumerable<iDB2DataReader> _queryReader(ConnectionWrapper connection, string queryString)
{
using (iDB2DataReader reader = GenerateCommand(connection, queryString).ExecuteReader())
{
Expand All @@ -279,11 +278,11 @@ public IEnumerable<iDB2DataReader> QueryReader(iDB2Connection connection, string

public bool Execute(string queryString, params KeyValuePair<string, object>[] 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;
}
Expand All @@ -301,11 +300,11 @@ public bool Execute(string queryString, params KeyValuePair<string, object>[] qu

public bool Execute(string queryString, params KeyValuePair<string, KeyValuePair<iDB2DbType, object>>[] 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;
}
Expand All @@ -323,7 +322,7 @@ public bool Execute(string queryString, params KeyValuePair<string, KeyValuePair

public bool Execute(string queryString)
{
using (iDB2Connection connection = GetConnection())
using (var connection = GetConnection())
{
try
{
Expand All @@ -348,10 +347,10 @@ public bool Execute(string queryString)

#region GenerateCommand

public iDB2Command GenerateCommand(iDB2Connection connection, string queryString)
public iDB2Command GenerateCommand(ConnectionWrapper connection, string queryString)
{
WriteLog(queryString);
var command = new iDB2Command(queryString, connection);
var command = new iDB2Command(queryString, connection.Connection);
if (useTransaction)
{
command.Transaction = _transaction;
Expand Down Expand Up @@ -390,21 +389,40 @@ public iDB2Command GenerateCommand(iDB2Connection connection, string queryString

#endregion

public iDB2Connection GetConnection()
public ConnectionWrapper GetConnection()
{
return _getConnection();
}

private iDB2Connection _rawConnection()
{
if (connectionPersist)
{
if (_connection == null)
{
_connection = new iDB2Connection(ConnectionString);
}
_connection.Open();

return _connection;
}
var newConn = new iDB2Connection(ConnectionString);
return newConn;
}

internal ConnectionWrapper _getConnection()
{
var conn = _rawConnection();
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
return new ConnectionWrapper(conn, !this.connectionPersist);

var connection = new iDB2Connection(ConnectionString);
connection.Open();
return connection;
}

public void ConnectionClose(ConnectionWrapper connection, bool force = false)
{
ConnectionClose(connection.Connection);
}

public void ConnectionClose(iDB2Connection connection, bool force = false)
Expand All @@ -419,12 +437,11 @@ public void ConnectionClose(iDB2Connection connection, bool force = false)
}
}


public void BeginTransaction()
{
useTransaction = true;
connectionPersist = true;
_transaction = GetConnection().BeginTransaction();
_transaction = GetConnection().Connection.BeginTransaction();
}

public void CompleteTransaction()
Expand Down

0 comments on commit 911855e

Please sign in to comment.