public class DbClient : IDisposable
{
#region Fields
IDbConnection _connection;
DbProviderFactory _factory;
#endregion
#region Properties
public string ConnectionString
{
get
{
return this._connection.ConnectionString;
}
}
public int CommandTimeout { get; set; }
#endregion
#region Construction / Destruction
public DbClient(string connectionStringName)
{
ConnectionStringSettings connectionString = null;
if (string.IsNullOrEmpty(connectionStringName))
throw new ArgumentException("There must be given a connection string name!");
if (ConfigurationManager.ConnectionStrings[connectionStringName] != null)
connectionString = ConfigurationManager.ConnectionStrings[connectionStringName];
else
throw new InvalidOperationException(String.Format("The connection string settings for {0} could not be found!", connectionStringName));
this.InitializeConnection(connectionString.ProviderName, connectionString.ConnectionString);
}
public DbClient(string dbProvider, string connectionString)
{
this.InitializeConnection(dbProvider, connectionString);
}
#endregion
#region Methods
private void InitializeConnection(string providerName, string connectionString)
{
this._factory = DbProviderFactories.GetFactory(providerName);
if (this._factory == null)
throw new InvalidOperationException(String.Format("The factory for data provider {0} could not be found!", providerName));
this._connection = this._factory.CreateConnection();
this._connection.ConnectionString = connectionString;
}
private void OpenConnection()
{
if (this._connection != null && this._connection.State != ConnectionState.Open)
{
this._connection.Open();
}
}
private void CloseConnection()
{
if (this._connection != null && this._connection.State != ConnectionState.Closed)
{
this._connection.Close();
}
}
public void Dispose()
{
if (this._connection != null)
{
this.CloseConnection();
this._connection.Dispose();
}
}
public DataSet ExecuteDataSet(string procedureName, IDataParameter[] parameters)
{
return this.ExecuteDataSet(CommandType.StoredProcedure, procedureName, parameters);
}
public DataSet ExecuteDataSet(CommandType commandType, string commandText, IDataParameter[] parameters)
{
return this.ExecuteDataSet(commandType, commandText, parameters, 60000);
}
public DataSet ExecuteDataSet(CommandType commandType, string commandText, IDataParameter[] parameters, int commandTimeout)
{
DataSet dsResult = new DataSet();
this.OpenConnection();
DbCommand command = (DbCommand)this.CreateCommand(commandType, commandText, parameters, commandTimeout);
DbDataAdapter adapter = this._factory.CreateDataAdapter();
adapter.SelectCommand = command;
adapter.Fill(dsResult);
this.CloseConnection();
return dsResult;
}
public IDataReader ExecuteDataReader(string procedureName, IDataParameter[] parameters)
{
return this.ExecuteDataReader(CommandType.StoredProcedure, procedureName, parameters);
}
public IDataReader ExecuteDataReader(CommandType commandType, string commandText, IDataParameter[] parameters)
{
return this.ExecuteDataReader(commandType, commandText, parameters, 60000);
}
public IDataReader ExecuteDataReader(CommandType commandType, string commandText, IDataParameter[] parameters, int commandTimeout)
{
this.OpenConnection();
IDbCommand command = this.CreateCommand(commandType, commandText, parameters, commandTimeout);
this.CloseConnection();
return command.ExecuteReader();
}
public object ExecuteScalar(string procedureName, IDataParameter[] parameters)
{
return this.ExecuteScalar(CommandType.StoredProcedure, procedureName, parameters);
}
public object ExecuteScalar(CommandType commandType, string commandText, IDataParameter[] parameters)
{
return this.ExecuteScalar(commandType, commandText, parameters, 60000);
}
public object ExecuteScalar(CommandType commandType, string commandText, IDataParameter[] parameters, int commandTimeout)
{
this.OpenConnection();
IDbCommand command = this.CreateCommand(commandType, commandText, parameters, commandTimeout);
Object result = command.ExecuteScalar();
this.CloseConnection();
return result;
}
public int ExecuteNonQuery(string procedureName, IDataParameter[] parameters)
{
return this.ExecuteNonQuery(CommandType.StoredProcedure, procedureName, parameters);
}
public int ExecuteNonQuery(CommandType commandType, string commandText, IDataParameter[] parameters)
{
return this.ExecuteNonQuery(commandType, commandText, parameters, 60000);
}
public int ExecuteNonQuery(CommandType commandType, string commandText, IDataParameter[] parameters, int commandTimeout)
{
int result = 0;
this.OpenConnection();
IDbCommand command = this.CreateCommand(commandType, commandText, parameters, commandTimeout);
result = command.ExecuteNonQuery();
this.CloseConnection();
return result;
}
private IDbCommand CreateCommand(CommandType commandType, string commandText, IDataParameter[] parameters, int commandTimeout)
{
IDbCommand command = this._connection.CreateCommand();
command.CommandTimeout = commandTimeout;
command.CommandText = commandText;
command.CommandType = commandType;
if(parameters != null)
foreach (IDataParameter parameter in parameters)
command.Parameters.Add(parameter);
return command;
}
public IDataParameter CreateParameter(string parameterName, DbType dbType, int size, object value)
{
return this.CreateParameter(parameterName, dbType, size, ParameterDirection.Input, value);
}
public IDataParameter CreateParameter(string parameterName, DbType dbType, int size, ParameterDirection parameterDirection)
{
return this.CreateParameter(parameterName, dbType, size, parameterDirection, null);
}
public IDataParameter CreateParameter(string parameterName, DbType dbType, int size, ParameterDirection parameterDirection, object value)
{
DbParameter parameter = this._factory.CreateParameter();
parameter.ParameterName = parameterName;
parameter.Direction = parameterDirection;
parameter.DbType = dbType;
parameter.Value = value;
parameter.Size = size;
return parameter;
}
#endregion
}
|