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; } } }