Parameter Constructor

Text

/// <summary>
    /// Parameter
    /// </summary>
    [Serializable]
    public class Parameter
    {
        /// <summary>
        /// Name
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// DbType
        /// </summary>
        public ParameterType Type { get; set; }
        /// <summary>
        /// Value
        /// </summary>
        public object Value { get; set; }
        /// <summary>
        /// Direction
        /// </summary>
        public ParameterDirection Direction { get; set; }
        /// <summary>
        /// Size
        /// </summary>
        public int? Size { get; set; }
        /// <summary>
        /// Is nullable
        /// </summary>
        public bool IsNullable { get; set; }
        /// <summary>
        /// Source column
        /// </summary>
        public string SourceColumn { get; set; }
        /// <summary>
        /// Source version
        /// </summary>
        public DataRowVersion SourceVersion { get; set; }
        /// <summary>
        /// Is like. If it's like parameter we must exaluate expression before assigning it
        /// </summary>
        public string LikeMask { get; set; }
        /// <summary>
        /// Default value
        /// </summary>
        public object DefaultValue { get; set; }
        /// <summary>
        /// Is required
        /// </summary>
        public bool IsRequired { get; set; }
        
        /// <summary>
        /// Parameter. Fix for APPBASEPM-1104
        /// </summary>
        public Parameter()
            :
            this(string.Empty)
        {
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public Parameter(string name)
            :
            this(name, ParameterType.btype_text, null, ParameterDirection.Input, null)
        {
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public Parameter(string name, ParameterType type)
            :
            this(name, type, null, ParameterDirection.Input, null)
        {
        }
        /// <summary>
        /// Constructor
        /// </summary>
        //public Parameter(string name, ParameterType type, object value)
        //    :
        //    this(name, type, null, ParameterDirection.Input, value)
        //{
        //}
        /// <summary>
        /// Constructor
        /// </summary>
        public Parameter(string name, ParameterType type, ParameterDirection direction)
            :
            this(name, type, null, direction, null)
        {
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public Parameter(string name, ParameterType type, ParameterDirection direction, object value)
            :
            this(name, type, null, direction, value)
        {
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public Parameter(string name, ParameterType type, int? size, ParameterDirection direction)
            :
            this(name, type, size, direction, null)
        {
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public Parameter(string name, ParameterType type, int? size, ParameterDirection direction, object value)
        {
            Name = name;
            Type = type;
            Direction = direction;
            Value = value;
            Size = size;
            IsNullable = true;
            SourceVersion = DataRowVersion.Default;
        }
        /// <summary>
        /// Copy to
        /// </summary>
        /// <param name="parameter"></param>
        public void CopyTo(Parameter parameter)
        {
            ValidationHelper.ValidateNotNullObject(parameter, "parameter");
            parameter.Name = Name;
            parameter.Type = Type;
            parameter.DefaultValue = DefaultValue;
            parameter.Direction = Direction;
            parameter.IsNullable = IsNullable;
            parameter.IsRequired = IsRequired;
            parameter.LikeMask = LikeMask;
            parameter.Name = Name;
            parameter.Size = Size;
            parameter.SourceColumn = SourceColumn;
            parameter.SourceVersion = SourceVersion;
            parameter.Value = Value;
        }
    }
}

Parameter Type

Text

/// <summary>
/// Parameter type. Implementation independent type, supported in the platform.
/// </summary>
[Serializable]
public class ParameterType
{
    public static readonly ParameterType btype_text = new ParameterType(SystemType.btype_text);
    public static readonly ParameterType btype_large_text = new ParameterType(SystemType.btype_large_text);
    public static readonly ParameterType btype_integer = new ParameterType(SystemType.btype_integer);
    public static readonly ParameterType btype_number = new ParameterType(SystemType.btype_number);
    public static readonly ParameterType btype_currency = new ParameterType(SystemType.btype_currency);
    public static readonly ParameterType btype_picture = new ParameterType(SystemType.btype_picture);
    public static readonly ParameterType btype_date = new ParameterType(SystemType.btype_date);
    public static readonly ParameterType btype_time = new ParameterType(SystemType.btype_time);
    /// <summary>
    /// System type
    /// </summary>
    public SystemType SystemType { get; private set; }
    /// <summary>
    /// Check if parameter type is text
    /// </summary>
    public bool IsText
    {
        get { return SystemType == SystemType.btype_text; }
    }
    /// <summary>
    /// Is large text
    /// </summary>
    public bool IsLargeText
    {
        get { return SystemType == SystemType.btype_large_text; }
    }
    /// <summary>
    /// Is date time
    /// </summary>
    public bool IsDateTime
    {
        get { return SystemType == SystemType.btype_date || SystemType == SystemType.btype_time; }
    }
    /// <summary>
    /// Must have size
    /// </summary>
    public bool MustHaveSize
    {
        get { return SystemType == SystemType.btype_text; }
    }
    #region Constructors
    /// <summary>
    /// Constructor
    /// </summary>
    public ParameterType()
        :
        this(SystemType.btype_text)
    {
    }
    /// <summary>
    /// Constructor
    /// </summary>
    /// <param name="systemType"></param>
    public ParameterType(SystemType systemType)
    {
        SystemType = systemType;
    }
    /// <summary>
    /// btype_text
    /// </summary>
    /// <returns></returns>
    public static ParameterType Text()
    {
        return new ParameterType(SystemType.btype_text);
    }
    /// <summary>
    /// btype_large_text
    /// </summary>
    /// <returns></returns>
    public static ParameterType LargeText()
    {
        return new ParameterType(SystemType.btype_large_text);
    }
    /// <summary>
    /// btype_integer
    /// </summary>
    /// <returns></returns>
    public static ParameterType Integer()
    {
        return new ParameterType(SystemType.btype_integer);
    }
    /// <summary>
    /// btype_number
    /// </summary>
    /// <returns></returns>
    public static ParameterType Number()
    {
        return new ParameterType(SystemType.btype_number);
    }
    /// <summary>
    /// btype_currency
    /// </summary>
    /// <returns></returns>
    public static ParameterType Currency()
    {
        return new ParameterType(SystemType.btype_currency);
    }
    /// <summary>
    /// btype_picture
    /// </summary>
    /// <returns></returns>
    public static ParameterType Picture()
    {
        return new ParameterType(SystemType.btype_picture);
    }
    /// <summary>
    /// btype_date
    /// </summary>
    /// <returns></returns>
    public static ParameterType Date()
    {
        return new ParameterType(SystemType.btype_date);
    }
    /// <summary>
    /// btype_time
    /// </summary>
    /// <returns></returns>
    public static ParameterType Time()
    {
        return new ParameterType(SystemType.btype_time);
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public static ParameterType Parse(string s)
    {
        return new ParameterType((SystemType)Enum.Parse(typeof(SystemType), s, true));
    }
    #endregion
    #region Conversions
    /// <summary>
    /// To sql server db type
    /// </summary>
    /// <returns></returns>
    public SqlDbType ToSqlServerDbType()
    {
        switch (SystemType)
        {
            case SystemType.btype_text:
                return SqlDbType.NVarChar;
            case SystemType.btype_large_text:
                return SqlDbType.NVarChar;
            case SystemType.btype_integer:
                return SqlDbType.Int;
            case SystemType.btype_number:
                return SqlDbType.Decimal;
            case SystemType.btype_currency:
                return SqlDbType.Decimal;
            case SystemType.btype_picture:
                return SqlDbType.Image;
            case SystemType.btype_date:
                return SqlDbType.Date;
            case SystemType.btype_time:
                return SqlDbType.DateTime;
            default:
                return SqlDbType.NVarChar;
        }
    }
    /// <summary>
    /// To oracle server db type
    /// </summary>
    /// <returns></returns>
    public OracleDbType ToOracleDbType()
    {
        switch (SystemType)
        {
            case SystemType.btype_text:
                return OracleDbType.NVarchar2;
            case SystemType.btype_large_text:
                return OracleDbType.NClob;
            case SystemType.btype_integer:
                return OracleDbType.Int32;
            case SystemType.btype_number:
                return OracleDbType.Decimal;
            case SystemType.btype_currency:
                return OracleDbType.Decimal;
            case SystemType.btype_picture:
                return OracleDbType.Blob;
            case SystemType.btype_date:
                return OracleDbType.Date;
            case SystemType.btype_time:
                return OracleDbType.Date;
            default:
                return OracleDbType.NVarchar2;
        }
    }
    /// <summary>
    /// To oracle db type (specific to DDL statements), e.g. nvarchar2, number, etc
    /// </summary>
    /// <returns></returns>
    public string ToOracleDbTypeWithoutScaleAsString()
    {
        switch (SystemType)
        {
            case SystemType.btype_text:
                return "nvarchar2";
            case SystemType.btype_large_text:
                return "nclob";
            case SystemType.btype_integer:
                return "number";
            case SystemType.btype_number:
                return "number";
            case SystemType.btype_currency:
                return "number";
            case SystemType.btype_picture:
                return "blob";
            case SystemType.btype_date:
                return "date";
            case SystemType.btype_time:
                return "date";
            default:
                return "nvarchar2";
        }
    }
    /// <summary>
    /// To db type
    /// </summary>
    /// <returns></returns>
    public DbType ToDbType()
    {
        switch (SystemType)
        {
            case SystemType.btype_text:
                return DbType.String;
            case SystemType.btype_large_text:
                return DbType.String;
            case SystemType.btype_integer:
                return DbType.Int32;
            case SystemType.btype_number:
                return DbType.Decimal;
            case SystemType.btype_currency:
                return DbType.Decimal;
            case SystemType.btype_picture:
                return DbType.Binary;
            case SystemType.btype_date:
                return DbType.Date;
            case SystemType.btype_time:
                return DbType.DateTime;
            //case SystemType.btype_picklist:
            //    return DbType.String;
            //case SystemType.btype_picklist_number:
            //    return DbType.Int32;
            default:
                return DbType.String;
        }
    }
    /// <summary>
    /// To clr type
    /// </summary>
    /// <returns></returns>
    public Type ToClrType()
    {
        switch (SystemType)
        {
            case SystemType.btype_text:
                return typeof(string);
            case SystemType.btype_large_text:
                return typeof(string);
            case SystemType.btype_integer:
                return typeof(int);
            case SystemType.btype_number:
                return typeof(decimal);
            case SystemType.btype_currency:
                return typeof(decimal);
            case SystemType.btype_picture:
                return typeof(byte[]);
            case SystemType.btype_date:
                return typeof(DateTime);
            case SystemType.btype_time:
                return typeof(TimeSpan);
            //case SystemType.btype_picklist:
            //    return typeof(string);
            //case SystemType.btype_picklist_number:
            //    return typeof(int);
            default:
                return typeof(string);
        }
    }

    /// <summary>
    /// Get column type specific sql as string
    /// </summary>
    /// <param name="length"></param>
    /// <param name="precision"></param>
    /// <param name="scale"></param>
    /// <returns></returns>
    public string GetOracleColumnTypeDeclaration(int? length, int? precision, int? scale)
    {
        const int defaultLength = 255;
        const int defaultPrecision = 18;
        const int defaultScale = 2;
        var x = ToOracleDbTypeWithoutScaleAsString();
        switch (SystemType)
        {
            case SystemType.btype_text:
                return string.Format("{0}({1})", x, length > 0 ? length : defaultLength);
            case SystemType.btype_number:
            case SystemType.btype_currency:
                return string.Format("{0}({1},{2})", x, precision > 0 ? precision : defaultPrecision, scale > 0 ? scale : defaultScale);
            default:
                return x;
        }
    }
    #endregion
    #region ParameterType Members
    /// <summary>
    /// Equals
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public override bool Equals(object obj)
    {
        var pt = obj as ParameterType;
        if (pt == null)
        {
            return false;
        }
        return pt.SystemType == SystemType;
    }
    /// <summary>
    /// To string
    /// </summary>
    /// <returns></returns>
    public override string ToString()
    {
        return SystemType.ToString();
    }
    /// <summary>
    /// Get hash code
    /// </summary>
    /// <returns></returns>
    public override int GetHashCode()
    {
        return SystemType.GetHashCode();
    }
    #endregion
}
/// <summary>
/// System type
/// </summary>
public enum SystemType
{
    btype_text,
    btype_large_text,
    btype_integer,
    btype_number,
    btype_currency,
    btype_picture,
    btype_date,
    btype_time,
}