예제 #1
0
        public void DisplayProviderTypeProperties(IProviderType type, TreeNode indexNode)
        {
            if (this._currentHashCode == type.GetHashCode())
            {
                return;
            }

            propGrid.SelectedObject = type;
            this._currentHashCode   = type.GetHashCode();
        }
        public void ReferenceNavigationPropertyObjectContextMemberReturnsCorrectReferenceNav()
        {
            IProviderType entityType = TestGetProviderType("OrderDetail");

            IProviderMember member = GetProviderMember(entityType.Members, "Order");

            VerifyReferenceNavigationMember(member, "Order");

            // rest of members are just primitives and are covered by testing other entity types, so don't need to repeat here
        }
예제 #3
0
        private bool StringConversionIsNeeded(IProviderType oldSqlType, IProviderType newSqlType)
        {
            if (!BothTypesAreStrings(oldSqlType, newSqlType))
            {
                return(true);
            }
            var flag = oldSqlType.IsFixedSize || newSqlType.IsFixedSize;

            return(!newSqlType.HasSizeOrIsLarge || (OldWillFitInNew(oldSqlType, newSqlType) && flag));
        }
예제 #4
0
        // Fields

        // Methods
        internal SqlValue(Type clrType, IProviderType sqlType, object value, bool isClientSpecified, Expression sourceExpression)
            : base(SqlNodeType.Value, clrType, sqlType, sourceExpression)
        {
#if DEBUG
            //if (sqlType.IsString && sqlType.GetType().Name != "AccessDataType")
            //    Debug.Assert(sqlType.Size > 0);
#endif
            this.Value             = value;
            this.IsClientSpecified = isClientSpecified;
        }
예제 #5
0
 // Methods
 internal SqlDiscriminatedType(IProviderType sqlType, SqlExpression discriminator, MetaType targetType, Expression sourceExpression)
     : base(SqlNodeType.DiscriminatedType, typeof(Type), sourceExpression)
 {
     if (discriminator == null)
     {
         throw Error.ArgumentNull("discriminator");
     }
     this.discriminator = discriminator;
     this.targetType    = targetType;
     this.sqlType       = sqlType;
 }
        private void VerifyAddressMembers(IProviderType complexType)
        {
            IEnumerable <IProviderMember> members = GetMembers(complexType, 2);

            IProviderMember member;

            member = GetProviderMember(members, "StreetAddress");
            VerifyPrimitiveMember(member, "String");
            member = GetProviderMember(members, "ZipCode");
            VerifyPrimitiveMember(member, "Int32");
        }
예제 #7
0
        protected virtual object GetParameterValue(IProviderType type, object value)
        {
            if (value == null)
            {
                return(DBNull.Value);
            }

            var type2 = value.GetType();
            var closestRuntimeType = type.GetClosestRuntimeType();

            return(closestRuntimeType == type2 ? value : DBConvert.ChangeType(value, closestRuntimeType));
        }
예제 #8
0
            //private int index = 0;
            //internal override string CreateParameterName()
            //{
            //    return (FirebirdIdentifier.Instance.ParameterPrefix + "p" + index++);
            //}
            #region MyRegion
            //internal override SqlParameter InsertLookup(SqlValue cp)
            //{
            //    SqlParameterInfo info;
            //    if (!map.TryGetValue(cp, out info))
            //    {
            //        var parameterName = cp.Value == null ? "NULL" : CreateParameterName();
            //        var parameter = new SqlParameter(cp.ClrType, cp.SqlType,
            //                                         parameterName,
            //                                         cp.SourceExpression);
            //        info = new SqlParameterInfo(parameter, cp.Value);
            //        map.Add(cp, info);
            //        currentParams.Add(info);
            //    }
            //    return info.Parameter;
            //}
            #endregion

            internal override SqlStoredProcedureCall VisitStoredProcedureCall(SqlStoredProcedureCall spc)
            {
                VisitUserQuery(spc);
                int num   = 0;
                int count = spc.Function.Parameters.Count;

                while (num < count)
                {
                    MetaParameter p    = spc.Function.Parameters[num];
                    var           node = spc.Arguments[num] as SqlParameter;
                    if (node != null)
                    {
                        node.Direction = GetParameterDirection(p);
                        Debug.Assert(!string.IsNullOrEmpty(p.MappedName));
                        node.Name = p.MappedName;
                        if ((node.Direction == ParameterDirection.InputOutput) ||
                            (node.Direction == ParameterDirection.Output))
                        {
                            RetypeOutParameter(node);
                        }
                    }
                    num++;
                }

                var returnType = spc.Function.Method.ReturnType;

                if (returnType != typeof(void))
                {
                    if (returnType.IsValueType || returnType == typeof(string))
                    {
                        IProviderType paramType = parameterizer.TypeProvider.From(returnType);

                        var parameter3 = new SqlParameter(returnType, paramType, ":RETURN_VALUE", spc.SourceExpression)
                        {
                            Direction = ParameterDirection.Output
                        };
                        currentParams.Add(new SqlParameterInfo(parameter3));
                    }
                    //else if (returnType.IsGenericType &&
                    //        ((returnType.GetGenericTypeDefinition() == typeof(IEnumerable<>)) ||
                    //         (returnType.GetGenericTypeDefinition() == typeof(ISingleResult<>))))
                    //{
                    //    //paramType = parameterizer.TypeProvider.From(typeof(OracleRefCursor));
                    //}
                    //else
                    //{
                    //    throw SqlClient.Error.InvalidReturnFromSproc(returnType);
                    //}
                }

                return(spc);
            }
예제 #9
0
 public override void InitializeParameter(IProviderType type, DbParameter parameter, object value)
 {
     base.InitializeParameter(type, parameter, value);
     if (value is DateTime)
     {
         parameter.DbType = DbType.String;
     }
     if (value is bool)
     {
         parameter.DbType = DbType.Boolean;
         parameter.Value  = value;
     }
 }
예제 #10
0
        protected IProviderType[] GetArgumentTypes(SqlFunctionCall fc)
        {
            var typeArray = new IProviderType[fc.Arguments.Count];
            int index     = 0;
            int length    = typeArray.Length;

            while (index < length)
            {
                typeArray[index] = fc.Arguments[index].SqlType;
                index++;
            }
            return(typeArray);
        }
예제 #11
0
        public override IProviderType GetBestType(IProviderType typeA, IProviderType typeB)
        {
            SqlTypeSystem.SqlType type = (typeA.ComparePrecedenceTo(typeB) > 0) ? ((SqlTypeSystem.SqlType)typeA) : ((ALinq.SqlClient.SqlTypeSystem.SqlType)typeB);
            if (typeA.IsApplicationType || typeA.IsRuntimeOnlyType)
            {
                return(typeA);
            }
            if (typeB.IsApplicationType || typeB.IsRuntimeOnlyType)
            {
                return(typeB);
            }
            var type2 = (SqlTypeSystem.SqlType)typeA;
            var type3 = (SqlTypeSystem.SqlType)typeB;

            if ((type2.HasPrecisionAndScale && type3.HasPrecisionAndScale) && ((SqlDbType)type.SqlDbType == SqlDbType.Decimal))
            {
                int precision = type2.Precision;
                int scale     = type2.Scale;
                int num3      = type3.Precision;
                int num4      = type3.Scale;
                if (((precision == 0) && (scale == 0)) && ((num3 == 0) && (num4 == 0)))
                {
                    return(SqlTypeSystem.Create((SqlDbType)type.SqlDbType));
                }
                if ((precision == 0) && (scale == 0))
                {
                    return(SqlTypeSystem.Create((SqlDbType)type.SqlDbType, num3, num4));
                }
                if ((num3 == 0) && (num4 == 0))
                {
                    return(SqlTypeSystem.Create((SqlDbType)type.SqlDbType, precision, scale));
                }
                int num5 = Math.Max(precision - scale, num3 - num4);
                int num6 = Math.Max(scale, num4);
                int num7 = Math.Min(num5 + num6, 0x26);
                return(SqlTypeSystem.Create((SqlDbType)type.SqlDbType, num7, num6));
            }
            int?size = null;

            if (type2.Size.HasValue && type3.Size.HasValue)
            {
                int?nullable4 = type3.Size;
                int?nullable5 = type2.Size;
                size = ((nullable4.GetValueOrDefault() > nullable5.GetValueOrDefault()) && (nullable4.HasValue & nullable5.HasValue)) ? type3.Size : type2.Size;
            }
            if ((type3.Size.HasValue && (type3.Size.Value == -1)) || (type2.Size.HasValue && (type2.Size.Value == -1)))
            {
                size = -1;
            }
            return(new SqlTypeSystem.SqlType((SqlDbType)type.SqlDbType, size));
        }
예제 #12
0
        public override bool IsSameTypeFamily(IProviderType type)
        {
            var type2 = (MySqlType)type;

            if (this.IsApplicationType)
            {
                return(false);
            }
            if (type2.IsApplicationType)
            {
                return(false);
            }
            return(this.Category == type2.Category);
        }
예제 #13
0
        public override void InitializeParameter(IProviderType type, DbParameter parameter, object value)
        {
            var parameter2 = parameter as OracleParameter;//System.Data.SqlClient.SqlParameter;

            if (parameter2 == null)
            {
                base.InitializeParameter(type, parameter, value);
                return;
            }
            var type2 = (SqlTypeSystem.SqlType)type;

            if (type2.IsRuntimeOnlyType)
            {
                throw SqlClient.Error.BadParameterType(type2.GetClosestRuntimeType());
            }
            Debug.Assert(parameter2 != null);


            parameter2.OracleDbType = ToOracleType((SqlDbType)type2.SqlDbType);
            if (type2.HasPrecisionAndScale)
            {
                parameter2.Precision = (byte)type2.Precision;
                parameter2.Scale     = (byte)type2.Scale;
            }

            if (type2.HasPrecisionAndScale)
            {
                parameter2.Precision = (byte)type2.Precision;
                parameter2.Scale     = (byte)type2.Scale;
            }

            parameter.Value = GetParameterValue(type2, value);
            if (!((parameter.Direction == ParameterDirection.Input) && type2.IsFixedSize) &&
                (parameter.Direction == ParameterDirection.Input))
            {
                return;
            }

            if (type2.Size.HasValue)
            {
                if (parameter.Size < type2.Size)
                {
                    parameter.Size = type2.Size.Value;
                }
            }
            if (!type2.IsLargeType)
            {
                return;
            }
        }
예제 #14
0
 // Methods
 internal SqlGrouping(Type clrType, IProviderType sqlType, SqlExpression key, SqlExpression group, Expression sourceExpression)
     : base(SqlNodeType.Grouping, clrType, sqlType, sourceExpression)
 {
     if (key == null)
     {
         throw Error.ArgumentNull("key");
     }
     if (group == null)
     {
         throw Error.ArgumentNull("group");
     }
     this.key   = key;
     this.group = group;
 }
예제 #15
0
        // Fields

        // Methods
        internal SqlParameter(Type clrType, IProviderType sqlType, string name, Expression sourceExpression)
            : base(SqlNodeType.Parameter, clrType, sqlType, sourceExpression)
        {
            if (name == null)
            {
                throw Error.ArgumentNull("name");
            }
            if (typeof(Type).IsAssignableFrom(clrType))
            {
                throw Error.ArgumentWrongValue("clrType");
            }
            this.Name      = name;
            this.Direction = ParameterDirection.Input;
        }
예제 #16
0
파일: SqlLink.cs 프로젝트: zyj0021/ALinq
 // Methods
 internal SqlLink(object id, MetaType rowType, Type clrType, IProviderType sqlType, SqlExpression expression, MetaDataMember member, IEnumerable <SqlExpression> keyExpressions, SqlExpression expansion, Expression sourceExpression)
     : base(SqlNodeType.Link, clrType, sqlType, sourceExpression)
 {
     this.id             = id;
     this.rowType        = rowType;
     this.expansion      = expansion;
     this.expression     = expression;
     this.member         = member;
     this.keyExpressions = new List <SqlExpression>();
     if (keyExpressions != null)
     {
         this.keyExpressions.AddRange(keyExpressions);
     }
 }
예제 #17
0
        bool IProviderType.IsSameTypeFamily(IProviderType type)
        {
            var type2 = (MySqlDataType)type;

            if (IsApplicationType)
            {
                return(false);
            }
            if (type2.IsApplicationType)
            {
                return(false);
            }
            return(Category == type2.Category);
        }
예제 #18
0
 // Methods
 internal SqlSubSelect(SqlNodeType nt, Type clrType, IProviderType sqlType, SqlSelect select)
     : base(nt, clrType, sqlType, select.SourceExpression)
 {
     switch (nt)
     {
     case SqlNodeType.Element:
     case SqlNodeType.Exists:
     case SqlNodeType.Multiset:
     case SqlNodeType.ScalarSubSelect:
         this.Select = select;
         return;
     }
     throw Error.UnexpectedNode(nt);
 }
예제 #19
0
 private SqlExpression ConvertToMax(SqlExpression expr, out bool changed)
 {
     changed = false;
     if (expr.SqlType.IsLargeType)
     {
         IProviderType bestLargeType = this.sql.TypeProvider.GetBestLargeType(expr.SqlType);
         changed = true;
         if (expr.SqlType != bestLargeType)
         {
             return(this.ConvertToMax(expr, bestLargeType));
         }
         changed = false;
     }
     return(expr);
 }
예제 #20
0
파일: SqlLike.cs 프로젝트: zyj0021/ALinq
 // Methods
 internal SqlLike(Type clrType, IProviderType sqlType, SqlExpression expr, SqlExpression pattern, SqlExpression escape, Expression source)
     : base(SqlNodeType.Like, clrType, sqlType, source)
 {
     if (expr == null)
     {
         throw Error.ArgumentNull("expr");
     }
     if (pattern == null)
     {
         throw Error.ArgumentNull("pattern");
     }
     this.Expression = expr;
     this.Pattern    = pattern;
     this.Escape     = escape;
 }
예제 #21
0
 // Methods
 internal SqlMethodCall(Type clrType, IProviderType sqlType, MethodInfo method, SqlExpression obj, IEnumerable <SqlExpression> args, Expression sourceExpression)
     : base(SqlNodeType.MethodCall, clrType, sqlType, sourceExpression)
 {
     if (method == null)
     {
         throw Error.ArgumentNull("method");
     }
     this.method = method;
     Object      = obj;
     arguments   = new List <SqlExpression>();
     if (args != null)
     {
         arguments.AddRange(args);
     }
 }
예제 #22
0
 internal bool RetypeOutParameter(SqlParameter node)
 {
     if (node.SqlType.IsLargeType)
     {
         IProviderType bestLargeType = this.parameterizer.TypeProvider.GetBestLargeType(node.SqlType);
         if (node.SqlType != bestLargeType)
         {
             node.SetSqlType(bestLargeType);
             return(true);
         }
         this.parameterizer.Annotations.Add(node, new SqlServerCompatibilityAnnotation(Strings.MaxSizeNotSupported(node.SourceExpression),
                                                                                       new[] { SqlProvider.ProviderMode.Sql2000 }));
     }
     return(false);
 }
예제 #23
0
        protected override object GetParameterValue(IProviderType type, object value)
        {
            if (value == null)
            {
                return(DBNull.Value);
            }

            var type2 = value.GetType();
            var closestRuntimeType = type.GetClosestRuntimeType();

            if (closestRuntimeType == typeof(OracleNumber))
            {
                return(new OracleNumber(Convert.ToDecimal(value)));
            }
            return(closestRuntimeType == type2 ? value : DBConvert.ChangeType(value, closestRuntimeType));
        }
예제 #24
0
        internal static object InheritanceCodeForClientCompare(object rawCode, IProviderType providerType)
        {
            if (!providerType.IsFixedSize || (rawCode.GetType() != typeof(string)))
            {
                return(rawCode);
            }
            var str = (string)rawCode;

            if (providerType.Size.HasValue)
            {
                if (str.Length != providerType.Size)
                {
                    str = str.PadRight(providerType.Size.Value).Substring(0, providerType.Size.Value);
                }
            }
            return(str);
        }
예제 #25
0
        //internal SqlColumn(string name, Expression expr)
        //    : this(expr.ClrType, expr.SqlType, name, null, expr, expr.SourceExpression)
        //{
        //}

        internal SqlColumn(Type clrType, IProviderType sqlType, string name, MetaDataMember member, SqlExpression expr, Expression sourceExpression)
            : base(SqlNodeType.Column, clrType, sourceExpression)
        {
            if (typeof(Type).IsAssignableFrom(clrType))
            {
                throw Error.ArgumentWrongValue("clrType");
            }
            this.name  = name;
            MetaMember = member;
            Expression = expr;
            Ordinal    = -1;
            if (sqlType == null)
            {
                throw Error.ArgumentNull("sqlType");
            }
            this.sqlType = sqlType;
        }
예제 #26
0
        private void VerifyOrderMembers(IProviderType entityType)
        {
            IEnumerable <IProviderMember> members = GetMembers(entityType, 5);

            IProviderMember member;

            member = GetProviderMember(members, "OrderID");
            VerifyPrimitiveMember(member, "Int32", expectedIsKey: true);
            member = GetProviderMember(members, "OrderDate");
            VerifyPrimitiveMember(member, "DateTime");
            member = GetProviderMember(members, "Description");
            VerifyPrimitiveMember(member, "String", expectedMimeType: "text/plain");
            member = GetProviderMember(members, "ShippingAddress");
            VerifyComplexMember(member, "Address");
            member = GetProviderMember(members, "OrderDetails");
            VerifyCollectionNavigationMember(member, "OrderDetail");
        }
예제 #27
0
 // Methods
 internal SqlTypeCase(Type clrType, IProviderType sqlType, MetaType rowType,
                      SqlExpression discriminator, IEnumerable <SqlTypeCaseWhen> whens, Expression sourceExpression)
     : base(SqlNodeType.TypeCase, clrType, sourceExpression)
 {
     this.Whens         = new List <SqlTypeCaseWhen>();
     this.Discriminator = discriminator;
     if (whens == null)
     {
         throw Error.ArgumentNull("whens");
     }
     this.Whens.AddRange(whens);
     if (this.Whens.Count == 0)
     {
         throw Error.ArgumentOutOfRange("whens");
     }
     this.sqlType = sqlType;
     this.RowType = rowType;
 }
예제 #28
0
        public void DisplayProviderTypeProperties(IProviderType type, TreeNode indexNode)
        {
            if (this._currentHashCode == type.GetHashCode())
            {
                return;
            }

            DataTable dt = new DataTable("MyData");

            dt.Columns.Add("Property", stringType);
            dt.Columns.Add("Value", stringType);

            dt.Rows.Add(new object[] { "Type", type.Type });
            dt.Rows.Add(new object[] { "DataType", type.DataType.ToString() });
            dt.Rows.Add(new object[] { "ColumnSize", type.ColumnSize.ToString() });
            dt.Rows.Add(new object[] { "LiteralPrefix", type.LiteralPrefix });
            dt.Rows.Add(new object[] { "LiteralSuffix", type.LiteralSuffix });
            dt.Rows.Add(new object[] { "CreateParams", type.CreateParams });
            dt.Rows.Add(new object[] { "IsNullable", type.IsNullable ? "True" : "False" });
            dt.Rows.Add(new object[] { "IsCaseSensitive", type.IsCaseSensitive ? "True" : "False" });
            //			dt.Rows.Add(new object[] {"Searchable", type.Searchable});
            dt.Rows.Add(new object[] { "IsUnsigned", type.IsUnsigned ? "True" : "False" });
            dt.Rows.Add(new object[] { "HasFixedPrecScale", type.HasFixedPrecScale ? "True" : "False" });
            dt.Rows.Add(new object[] { "CanBeAutoIncrement", type.CanBeAutoIncrement ? "True" : "False" });
            dt.Rows.Add(new object[] { "LocalType", type.LocalType });
            dt.Rows.Add(new object[] { "MinimumScale", type.MinimumScale.ToString() });
            dt.Rows.Add(new object[] { "MaximumScale", type.MaximumScale.ToString() });
            dt.Rows.Add(new object[] { "TypeGuid", type.TypeGuid.ToString() });
            dt.Rows.Add(new object[] { "TypeLib", type.TypeLib });
            dt.Rows.Add(new object[] { "Version", type.Version });
            dt.Rows.Add(new object[] { "IsLong", type.IsLong ? "True" : "False" });
            dt.Rows.Add(new object[] { "BestMatch", type.BestMatch ? "True" : "False" });
            dt.Rows.Add(new object[] { "IsFixedLength", type.IsFixedLength ? "True" : "False" });

            this.Grid.DataSource = dt;

            this.InitializeGrid();

            this.Text          = "IProviderType Properties";
            this.lnkHELP.Text  = "IProviderType Help ...";
            this.helpInterface = "IProviderType";

            this._currentHashCode = type.GetHashCode();
        }
예제 #29
0
파일: SqlRetyper.cs 프로젝트: zyj0021/ALinq
            internal override SqlExpression VisitSimpleCase(SqlSimpleCase c)
            {
                base.VisitSimpleCase(c);
                IProviderType type = c.Whens[0].Value.SqlType;

                for (int i = 1; i < c.Whens.Count; i++)
                {
                    IProviderType sqlType = c.Whens[i].Value.SqlType;
                    type = this.typeProvider.GetBestType(type, sqlType);
                }
                foreach (SqlWhen when in c.Whens.Where(delegate(SqlWhen w)
                {
                    //return (w.Value.SqlType != type) && !w.Value.SqlType.IsRuntimeOnlyType;
                    //MY Code
                    return((Convert.ToInt32(w.Value.SqlType.SqlDbType) != Convert.ToInt32(type.SqlDbType)) && !w.Value.SqlType.IsRuntimeOnlyType);
                    //======================
                }))
                {
                    when.Value = SqlFactory.UnaryConvert(when.Value.ClrType, type, when.Value, when.Value.SourceExpression);
                }
                return(c);
            }
예제 #30
0
파일: SqlRetyper.cs 프로젝트: zyj0021/ALinq
            internal override SqlExpression VisitFunctionCall(SqlFunctionCall fc)
            {
                if (fc.Name == "Limit")
                {
                    return(fc);
                }
                int num   = 0;
                int count = fc.Arguments.Count;

                while (num < count)
                {
                    fc.Arguments[num] = VisitExpression(fc.Arguments[num]);
                    num++;
                }
                if ((fc.Arguments.Count > 0) && (fc.Arguments[0].SqlType != null))
                {
                    IProviderType type = typeProvider.ReturnTypeOfFunction(fc);
                    if (type != null)
                    {
                        fc.SetSqlType(type);
                    }
                }
                return(fc);
            }
        public void DisplayProviderTypeProperties(IProviderType type, TreeNode indexNode)
        {
            if (this._currentHashCode == type.GetHashCode()) return;

            propGrid.SelectedObject = type;
            this._currentHashCode = type.GetHashCode();
        }
        private void VerifyAddressMembers(IProviderType complexType)
        {
            IEnumerable<IProviderMember> members = GetMembers(complexType, 2);

            IProviderMember member;
            member = GetProviderMember(members, "StreetAddress");
            VerifyPrimitiveMember(member, "String");
            member = GetProviderMember(members, "ZipCode");
            VerifyPrimitiveMember(member, "Int32");
        }        
        private void VerifySpecialOrderMembers(IProviderType entityType)
        {
            IEnumerable<IProviderMember> members = GetMembers(entityType, 1);

            IProviderMember member = GetProviderMember(members, "CustomInstructions");
            VerifyPrimitiveMember(member, "String");
        }
        private void VerifyOrderMembers(IProviderType entityType)
        {
            IEnumerable<IProviderMember> members = GetMembers(entityType, 5);

            IProviderMember member;
            member = GetProviderMember(members, "OrderID");
            VerifyPrimitiveMember(member, "Int32", expectedIsKey : true);
            member = GetProviderMember(members, "OrderDate");
            VerifyPrimitiveMember(member, "DateTime");
            member = GetProviderMember(members, "Description");
            VerifyPrimitiveMember(member, "String", expectedMimeType : "text/plain");
            member = GetProviderMember(members, "ShippingAddress");
            VerifyComplexMember(member, "Address");
            member = GetProviderMember(members, "OrderDetails");
            VerifyCollectionNavigationMember(member, "OrderDetail");
        }
 private static void VerifyProviderType(string typeName, IProviderType providerType)
 {
     Assert.IsNotNull(providerType, "Unable to get the provider type {0} from the metadata workspace.", typeName);
     Assert.AreEqual(typeName, providerType.Name, "IProviderType.Name is incorrect for type {0}.", typeName);
 }
 private static IEnumerable<IProviderMember> GetMembers(IProviderType providerType, int expectedMemberCount)
 {
     IEnumerable<IProviderMember> members = providerType.Members;
     Assert.AreEqual(expectedMemberCount, members.Count(), "Provider type {0} does not have the expected number of members.", providerType.Name);
     return members;
 }
예제 #37
0
		public void DisplayProviderTypeProperties(IProviderType type, TreeNode indexNode)
		{
			DataTable dt = new DataTable("MyData");

			dt.Columns.Add("Property", stringType);
			dt.Columns.Add("Value", stringType);

			dt.Rows.Add(new object[] {"Type", type.Type});
			dt.Rows.Add(new object[] {"DataType", type.DataType.ToString()});
			dt.Rows.Add(new object[] {"ColumnSize", type.ColumnSize.ToString()});
			dt.Rows.Add(new object[] {"LiteralPrefix", type.LiteralPrefix});
			dt.Rows.Add(new object[] {"LiteralSuffix", type.LiteralSuffix});
			dt.Rows.Add(new object[] {"CreateParams", type.CreateParams});
			dt.Rows.Add(new object[] {"IsNullable", type.IsNullable ? "True" : "False"});
			dt.Rows.Add(new object[] {"IsCaseSensitive", type.IsCaseSensitive ? "True" : "False"});
			//			dt.Rows.Add(new object[] {"Searchable", type.Searchable});
			dt.Rows.Add(new object[] {"IsUnsigned", type.IsUnsigned ? "True" : "False"});
			dt.Rows.Add(new object[] {"HasFixedPrecScale", type.HasFixedPrecScale ? "True" : "False"});
			dt.Rows.Add(new object[] {"CanBeAutoIncrement", type.CanBeAutoIncrement ? "True" : "False"});
			dt.Rows.Add(new object[] {"LocalType", type.LocalType});
			dt.Rows.Add(new object[] {"MinimumScale", type.MinimumScale.ToString()});
			dt.Rows.Add(new object[] {"MaximumScale", type.MaximumScale.ToString()});
			dt.Rows.Add(new object[] {"TypeGuid", type.TypeGuid.ToString()});
			dt.Rows.Add(new object[] {"TypeLib", type.TypeLib});
			dt.Rows.Add(new object[] {"Version", type.Version});
			dt.Rows.Add(new object[] {"IsLong", type.IsLong ? "True" : "False"});
			dt.Rows.Add(new object[] {"BestMatch", type.BestMatch ? "True" : "False"});
			dt.Rows.Add(new object[] {"IsFixedLength", type.IsFixedLength ? "True" : "False"});

			this.Grid.DataSource = dt;

			this.InitializeGrid();

			this.Text = "IProviderType Properties";
			this.lnkHELP.Text = "IProviderType Help ...";
			this.helpInterface = "IProviderType";
		}