protected override ReadOnlyList <IParameter> GetParameters(IDbConnection cn)
        {
            DBStructure.INFORMATION_SCHEMA_PARAMETERSDataTable dt = new DBStructure.INFORMATION_SCHEMA_PARAMETERSDataTable();
            using (SqlCommand cmd = (SqlCommand)cn.CreateCommand())
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine(DBSchemaInfo.Properties.Resources.SqlServerGetParameters);
                sb.AppendLine("WHERE");
                if (!string.IsNullOrEmpty(this.ObjectCatalog))
                {
                    sb.Append("SPECIFIC_CATALOG = @Catalog");
                    cmd.Parameters.AddWithValue("@Catalog", this.ObjectCatalog);
                }
                if (!string.IsNullOrEmpty(this.ObjectSchema))
                {
                    sb.Append("SPECIFIC_SCHEMA = @Schema");
                    cmd.Parameters.AddWithValue("@Schema", this.ObjectSchema);
                }
                sb.Append("SPECIFIC_NAME = @Name");
                cmd.Parameters.AddWithValue("@Name", this.ObjectName);

                cmd.CommandText = sb.ToString();
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    da.Fill(dt);
                }
            }
            DBStructure.INFORMATION_SCHEMA_PARAMETERSRow[] rows = new DBStructure.INFORMATION_SCHEMA_PARAMETERSRow[dt.Count];
            return(GetParameters(rows));
        }
        public SqlStoredProcedureParameter(DBStructure.INFORMATION_SCHEMA_PARAMETERSRow dr)
        {
            ColumnScale   = 0;
            ColumnLength  = 0;
            ParameterName = dr.PARAMETER_NAME;
            ParameterType = dr.DATA_TYPE;
            NativeType    = ParameterType;

            _sqlDbType = SqlTypeMapper.GetSqlDbType(dr.DATA_TYPE);
            Order      = Convert.ToInt32(dr.ORDINAL_POSITION);
            if (!dr.IsCHARACTER_MAXIMUM_LENGTHNull())
            {
                ColumnLength = dr.CHARACTER_MAXIMUM_LENGTH;
            }
            else if (!dr.IsNUMERIC_PRECISIONNull())
            {
                ColumnLength = Convert.ToInt64(dr.NUMERIC_PRECISION);
                if (!dr.IsNUMERIC_SCALENull())
                {
                    ColumnScale = dr.NUMERIC_SCALE;
                }
            }
            else if (!dr.IsDATETIME_PRECISIONNull())
            {
                ColumnLength = Convert.ToInt64(dr.DATETIME_PRECISION);
            }
        }