public override DataTable GetSchemaTable() { this.ThrowIfClosed("GetSchemaTable"); if ((this._schemaTable == null) && this.FInResults()) { DataTable table = new DataTable("SchemaTable") { Locale = CultureInfo.InvariantCulture, MinimumCapacity = this.InternalFieldCount }; DataColumn column31 = new DataColumn(SchemaTableColumn.ColumnName, typeof(string)); DataColumn column9 = new DataColumn(SchemaTableColumn.ColumnOrdinal, typeof(int)); DataColumn column30 = new DataColumn(SchemaTableColumn.ColumnSize, typeof(int)); DataColumn column29 = new DataColumn(SchemaTableColumn.NumericPrecision, typeof(short)); DataColumn column8 = new DataColumn(SchemaTableColumn.NumericScale, typeof(short)); DataColumn column7 = new DataColumn(SchemaTableColumn.DataType, typeof(Type)); DataColumn column6 = new DataColumn(SchemaTableOptionalColumn.ProviderSpecificDataType, typeof(Type)); DataColumn column28 = new DataColumn(SchemaTableColumn.ProviderType, typeof(int)); DataColumn column27 = new DataColumn(SchemaTableColumn.NonVersionedProviderType, typeof(int)); DataColumn column5 = new DataColumn(SchemaTableColumn.IsLong, typeof(bool)); DataColumn column26 = new DataColumn(SchemaTableColumn.AllowDBNull, typeof(bool)); DataColumn column25 = new DataColumn(SchemaTableOptionalColumn.IsReadOnly, typeof(bool)); DataColumn column4 = new DataColumn(SchemaTableOptionalColumn.IsRowVersion, typeof(bool)); DataColumn column3 = new DataColumn(SchemaTableColumn.IsUnique, typeof(bool)); DataColumn column24 = new DataColumn(SchemaTableColumn.IsKey, typeof(bool)); DataColumn column23 = new DataColumn(SchemaTableOptionalColumn.IsAutoIncrement, typeof(bool)); DataColumn column22 = new DataColumn(SchemaTableOptionalColumn.IsHidden, typeof(bool)); DataColumn column21 = new DataColumn(SchemaTableOptionalColumn.BaseCatalogName, typeof(string)); DataColumn column20 = new DataColumn(SchemaTableColumn.BaseSchemaName, typeof(string)); DataColumn column19 = new DataColumn(SchemaTableColumn.BaseTableName, typeof(string)); DataColumn column2 = new DataColumn(SchemaTableColumn.BaseColumnName, typeof(string)); DataColumn column18 = new DataColumn(SchemaTableOptionalColumn.BaseServerName, typeof(string)); DataColumn column17 = new DataColumn(SchemaTableColumn.IsAliased, typeof(bool)); DataColumn column16 = new DataColumn(SchemaTableColumn.IsExpression, typeof(bool)); DataColumn column15 = new DataColumn("IsIdentity", typeof(bool)); DataColumn column = new DataColumn("DataTypeName", typeof(string)); DataColumn column14 = new DataColumn("UdtAssemblyQualifiedName", typeof(string)); DataColumn column13 = new DataColumn("XmlSchemaCollectionDatabase", typeof(string)); DataColumn column12 = new DataColumn("XmlSchemaCollectionOwningSchema", typeof(string)); DataColumn column11 = new DataColumn("XmlSchemaCollectionName", typeof(string)); DataColumn column10 = new DataColumn("IsColumnSet", typeof(bool)); column9.DefaultValue = 0; column5.DefaultValue = false; DataColumnCollection columns = table.Columns; columns.Add(column31); columns.Add(column9); columns.Add(column30); columns.Add(column29); columns.Add(column8); columns.Add(column3); columns.Add(column24); columns.Add(column18); columns.Add(column21); columns.Add(column2); columns.Add(column20); columns.Add(column19); columns.Add(column7); columns.Add(column26); columns.Add(column28); columns.Add(column17); columns.Add(column16); columns.Add(column15); columns.Add(column23); columns.Add(column4); columns.Add(column22); columns.Add(column5); columns.Add(column25); columns.Add(column6); columns.Add(column); columns.Add(column13); columns.Add(column12); columns.Add(column11); columns.Add(column14); columns.Add(column27); columns.Add(column10); for (int i = 0; i < this.InternalFieldCount; i++) { SmiQueryMetaData data = this._currentMetaData[i]; long maxLength = data.MaxLength; MetaType metaTypeFromSqlDbType = MetaType.GetMetaTypeFromSqlDbType(data.SqlDbType, data.IsMultiValued); if (-1L == maxLength) { metaTypeFromSqlDbType = MetaType.GetMaxMetaTypeFromMetaType(metaTypeFromSqlDbType); maxLength = (metaTypeFromSqlDbType.IsSizeInCharacters && !metaTypeFromSqlDbType.IsPlp) ? ((long)0x3fffffff) : ((long)0x7fffffff); } DataRow row = table.NewRow(); if (SqlDbType.Decimal == data.SqlDbType) { maxLength = 0x11L; } else if (SqlDbType.Variant == data.SqlDbType) { maxLength = 0x1f49L; } row[column31] = data.Name; row[column9] = i; row[column30] = maxLength; row[column28] = (int)data.SqlDbType; row[column27] = (int)data.SqlDbType; if (data.SqlDbType != SqlDbType.Udt) { row[column7] = metaTypeFromSqlDbType.ClassType; row[column6] = metaTypeFromSqlDbType.SqlType; } else { row[column14] = data.Type.AssemblyQualifiedName; row[column7] = data.Type; row[column6] = data.Type; } byte precision = 0xff; switch (data.SqlDbType) { case SqlDbType.BigInt: case SqlDbType.DateTime: case SqlDbType.Decimal: case SqlDbType.Int: case SqlDbType.Money: case SqlDbType.SmallDateTime: case SqlDbType.SmallInt: case SqlDbType.SmallMoney: case SqlDbType.TinyInt: precision = data.Precision; break; case SqlDbType.Float: precision = 15; break; case SqlDbType.Real: precision = 7; break; default: precision = 0xff; break; } row[column29] = precision; if (((SqlDbType.Decimal == data.SqlDbType) || (SqlDbType.Time == data.SqlDbType)) || ((SqlDbType.DateTime2 == data.SqlDbType) || (SqlDbType.DateTimeOffset == data.SqlDbType))) { row[column8] = data.Scale; } else { row[column8] = MetaType.GetMetaTypeFromSqlDbType(data.SqlDbType, data.IsMultiValued).Scale; } row[column26] = data.AllowsDBNull; if (!data.IsAliased.IsNull) { row[column17] = data.IsAliased.Value; } if (!data.IsKey.IsNull) { row[column24] = data.IsKey.Value; } if (!data.IsHidden.IsNull) { row[column22] = data.IsHidden.Value; } if (!data.IsExpression.IsNull) { row[column16] = data.IsExpression.Value; } row[column25] = data.IsReadOnly; row[column15] = data.IsIdentity; row[column10] = data.IsColumnSet; row[column23] = data.IsIdentity; row[column5] = metaTypeFromSqlDbType.IsLong; if (SqlDbType.Timestamp == data.SqlDbType) { row[column3] = true; row[column4] = true; } else { row[column3] = false; row[column4] = false; } if (!ADP.IsEmpty(data.ColumnName)) { row[column2] = data.ColumnName; } else if (!ADP.IsEmpty(data.Name)) { row[column2] = data.Name; } if (!ADP.IsEmpty(data.TableName)) { row[column19] = data.TableName; } if (!ADP.IsEmpty(data.SchemaName)) { row[column20] = data.SchemaName; } if (!ADP.IsEmpty(data.CatalogName)) { row[column21] = data.CatalogName; } if (!ADP.IsEmpty(data.ServerName)) { row[column18] = data.ServerName; } if (SqlDbType.Udt == data.SqlDbType) { row[column] = data.TypeSpecificNamePart1 + "." + data.TypeSpecificNamePart2 + "." + data.TypeSpecificNamePart3; } else { row[column] = metaTypeFromSqlDbType.TypeName; } if (SqlDbType.Xml == data.SqlDbType) { row[column13] = data.TypeSpecificNamePart1; row[column12] = data.TypeSpecificNamePart2; row[column11] = data.TypeSpecificNamePart3; } table.Rows.Add(row); row.AcceptChanges(); } foreach (DataColumn column32 in columns) { column32.ReadOnly = true; } this._schemaTable = table; } return(this._schemaTable); }