using System.Data;
using System.Data.Common;
namespace com.cloudsoft.utils
{
///
/// Database Parameters class.
/// Allows parameters to be added to a DBHelper.
/// Can only be instatiated from a DBHelper.
/// JF 12/2007 - DBParams can now represent either an DbCommand or an DbCommand. Which one
/// is decided when it is created by DBHelper. Once it is created though the client doesn't need to
/// know which one it is dealing with.
///
public class DBParams
{
///
/// DataType enumerator.
///
///
///
/// - VarChar - Varchar (string)
/// - Long - Long integer
/// - Double - Double (float)
/// - DateTime - Date
/// - LongVarChar - Clob
///
///
public enum DataType {
/// Varchar
VarChar,
/// Int
Int,
/// Long
Long,
/// Double
Double,
/// DateTime
DateTime,
/// LongVarChar
LongVarChar,
/// BLOB
BLOB,
/// Clob
Clob,
/// Xml
Xml
};
internal DbCommand Command;
///
/// Oracle type equivalent of the oleType function. Returns the SqlDbType from the general
/// DBParams.DataType.
///
/// A non-provider specific datatype.
/// An SqlDbType.
private DbType _ODACType(DataType eDT)
{
switch (eDT)
{
case DataType.DateTime: return DbType.DateTime;
case DataType.Int: return DbType.Int32;
case DataType.Long: return DbType.Int64;
case DataType.Double: return DbType.Decimal;
case DataType.LongVarChar: return DbType.String;
case DataType.BLOB: return DbType.Binary;
case DataType.Clob: return DbType.String;
default: return DbType.String;
}
}
///
/// DbCommand based DBParams constructor.
///
/// The DbCommand to wrap.
internal DBParams(DbCommand oCommand)
{
Command = oCommand;
}
///
/// Add Parameter method for the DbCommand
///
///
///
public void add(String zParamName, DataType eDT, object value)
{
//Command.Parameters.Add(new DbParameter(zParamName, _ODACType(eDT), value, System.Data.ParameterDirection.Input));
}
///
/// Adds a Input Parameter to the DBHelper
///
/// Parameter Name
/// DataType
/// Size of the parameter
/// Value of the Parameter
public void add(String zParamName, DataType eDT, int iSize, Object oValue)
{
//Set the size to 1 for longvarchars...
if ((eDT == DataType.LongVarChar) && (oValue == null))
iSize = 1;
//Adds the parameter...
DbParameter dbParam = Command.CreateParameter();
dbParam.ParameterName = zParamName;
dbParam.DbType = _ODACType(eDT);
dbParam.Size = iSize;
dbParam.Value = oValue;
Command.Parameters.Add(dbParam);
}
///
/// Adds a Input Parameter to the DBHelper without a value
///
/// Parameter Name
/// DataType
/// Size of the parameter
public void add(String zParamName, DataType eDT, int iSize)
{
//Add the parameter...
DbParameter dbParam = Command.CreateParameter();
dbParam.ParameterName = zParamName;
dbParam.DbType = _ODACType(eDT);
dbParam.Size = iSize;
Command.Parameters.Add(dbParam);
}
///
/// Adds a Input Parameter to the DBHelper without a value or size
///
/// Parameter Name
/// DataType
/// Size of the parameter
public void add(String zParamName, DataType eDT)
{
//Add the parameter...
var dbParam = Command.CreateParameter();
dbParam.ParameterName = zParamName;
dbParam.DbType = _ODACType(eDT);
Command.Parameters.Add(dbParam);
}
///
/// Sets the input parameter value for a given parameter name
///
/// Parameter Name
/// Value to set the input parameter to
public void set(String zParamName, Object oValue)
{
//Set the parameter value...
Command.Parameters[zParamName].Value = oValue;
}
///
/// Sets the input parameter value for a given parameter index
///
/// Parameter Index
/// Value to set the input parameter to
public void set(int index, Object oValue)
{
//Set the parameter value...
Command.Parameters[index].Value = oValue;
}
public void set(string zParam, Object oValue, DbType iType)
{
DbParameter oParam = null;
if (Command.Parameters.Contains(zParam)) {
oParam = Command.Parameters[zParam];
oParam.Value = oValue;
}
else
{
oParam = Command.CreateParameter();
oParam.ParameterName = zParam;
if (iType != null)
oParam.DbType = iType;
oParam.Value = oValue;
Command.Parameters.Add(oParam);
}
}
///
/// Adds an Output Parameter
///
/// Parameter Name
/// Data Type
/// Size of the parameter
public void addOutput(String zParamName, DataType eDT, int iSize)
{
//Add the output parameter...
var dbParam = Command.CreateParameter();
dbParam.ParameterName = zParamName;
dbParam.DbType = _ODACType(eDT);
dbParam.Size = iSize;
dbParam.Direction = ParameterDirection.Output;
}
///
/// Exposes the Parameters for the DbCommand.
///
/// DbParameterCollection
public DbParameterCollection ODACParameters()
{
return Command.Parameters;
}
///
/// Closes the appropriate underlying connection.
///
public void CloseConnection()
{
Command.Connection.Close();
}
///
/// Closes the appropriate underlying command.
///
public void CloseCommand()
{
Command.Connection.Dispose();
Command.Dispose();
}
///
/// Executes the appropriate underlying command.
///
/// int
public int ExecuteNonQuery()
{
return Command.ExecuteNonQuery();
}
public DbCommand AsDbCommand()
{
return Command;
}
}
}