| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- //------------------------------------------------------------------------------
- // <copyright file="DataTableMapping.cs" company="Microsoft">
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // </copyright>
- // <owner current="true" primary="true">Microsoft</owner>
- // <owner current="true" primary="false">Microsoft</owner>
- //------------------------------------------------------------------------------
- namespace System.Data.Common {
- using System;
- using System.ComponentModel;
- using System.ComponentModel.Design.Serialization;
- using System.Data;
- using System.Diagnostics;
- using System.Globalization;
- using System.Reflection;
- [
- System.ComponentModel.TypeConverterAttribute(typeof(System.Data.Common.DataTableMapping.DataTableMappingConverter))
- ]
- public sealed class DataTableMapping : MarshalByRefObject, ITableMapping, ICloneable {
- private DataTableMappingCollection parent;
- private DataColumnMappingCollection _columnMappings;
- private string _dataSetTableName;
- private string _sourceTableName;
- public DataTableMapping() {
- }
- public DataTableMapping(string sourceTable, string dataSetTable) {
- SourceTable = sourceTable;
- DataSetTable = dataSetTable;
- }
- public DataTableMapping(string sourceTable, string dataSetTable, DataColumnMapping[] columnMappings) {
- SourceTable = sourceTable;
- DataSetTable = dataSetTable;
- if ((null != columnMappings) && (0 < columnMappings.Length)) {
- ColumnMappings.AddRange(columnMappings);
- }
- }
- // explict ITableMapping implementation
- IColumnMappingCollection ITableMapping.ColumnMappings {
- get { return ColumnMappings; }
- }
- [
- DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
- ResCategoryAttribute(Res.DataCategory_Mapping),
- ResDescriptionAttribute(Res.DataTableMapping_ColumnMappings),
- ]
- public DataColumnMappingCollection ColumnMappings {
- get {
- DataColumnMappingCollection columnMappings = _columnMappings;
- if (null == columnMappings) {
- columnMappings = new DataColumnMappingCollection();
- _columnMappings = columnMappings;
- }
- return columnMappings;
- }
- }
- [
- DefaultValue(""),
- ResCategoryAttribute(Res.DataCategory_Mapping),
- ResDescriptionAttribute(Res.DataTableMapping_DataSetTable),
- ]
- public string DataSetTable {
- get {
- string dataSetTableName = _dataSetTableName;
- return ((null != dataSetTableName) ? dataSetTableName : ADP.StrEmpty);
- }
- set {
- _dataSetTableName = value;
- }
- }
-
- internal DataTableMappingCollection Parent {
- get {
- return parent;
- }
- set {
- parent = value;
- }
- }
- [
- DefaultValue(""),
- ResCategoryAttribute(Res.DataCategory_Mapping),
- ResDescriptionAttribute(Res.DataTableMapping_SourceTable),
- ]
- public string SourceTable {
- get {
- string sourceTableName = _sourceTableName;
- return ((null != sourceTableName) ? sourceTableName : ADP.StrEmpty);
- }
- set {
- if ((null != Parent) && (0 != ADP.SrcCompare(_sourceTableName, value))) {
- Parent.ValidateSourceTable(-1, value);
- }
- _sourceTableName = value;
- }
- }
- object ICloneable.Clone() {
- DataTableMapping clone = new DataTableMapping(); // MDAC 81448
- clone._dataSetTableName = _dataSetTableName;
- clone._sourceTableName = _sourceTableName;
- if ((null != _columnMappings) && (0 < ColumnMappings.Count)) {
- DataColumnMappingCollection parameters = clone.ColumnMappings;
- foreach(ICloneable parameter in ColumnMappings) {
- parameters.Add(parameter.Clone());
- }
- }
- return clone;
- }
- [ EditorBrowsableAttribute(EditorBrowsableState.Advanced) ] // MDAC 69508
- public DataColumn GetDataColumn(string sourceColumn, Type dataType, DataTable dataTable, MissingMappingAction mappingAction, MissingSchemaAction schemaAction) {
- return DataColumnMappingCollection.GetDataColumn(_columnMappings, sourceColumn, dataType, dataTable, mappingAction, schemaAction);
- }
-
- [ EditorBrowsableAttribute(EditorBrowsableState.Advanced) ] // MDAC 69508
- public DataColumnMapping GetColumnMappingBySchemaAction(string sourceColumn, MissingMappingAction mappingAction) {
- return DataColumnMappingCollection.GetColumnMappingBySchemaAction(_columnMappings, sourceColumn, mappingAction);
- }
- [ EditorBrowsableAttribute(EditorBrowsableState.Advanced) ] // MDAC 69508
- public DataTable GetDataTableBySchemaAction(DataSet dataSet, MissingSchemaAction schemaAction) {
- if (null == dataSet) {
- throw ADP.ArgumentNull("dataSet");
- }
- string dataSetTable = DataSetTable;
- if (ADP.IsEmpty(dataSetTable)) {
- #if DEBUG
- if (AdapterSwitches.DataSchema.TraceWarning) {
- Debug.WriteLine("explicit filtering of SourceTable \"" + SourceTable + "\"");
- }
- #endif
- return null;
- }
- DataTableCollection tables = dataSet.Tables;
- int index = tables.IndexOf(dataSetTable);
- if ((0 <= index) && (index < tables.Count)) {
- #if DEBUG
- if (AdapterSwitches.DataSchema.TraceInfo) {
- Debug.WriteLine("schema match on DataTable \"" + dataSetTable);
- }
- #endif
- return tables[index];
- }
- switch (schemaAction) {
- case MissingSchemaAction.Add:
- case MissingSchemaAction.AddWithKey:
- #if DEBUG
- if (AdapterSwitches.DataSchema.TraceInfo) {
- Debug.WriteLine("schema add of DataTable \"" + dataSetTable + "\"");
- }
- #endif
- return new DataTable(dataSetTable);
- case MissingSchemaAction.Ignore:
- #if DEBUG
- if (AdapterSwitches.DataSchema.TraceWarning) {
- Debug.WriteLine("schema filter of DataTable \"" + dataSetTable + "\"");
- }
- #endif
- return null;
- case MissingSchemaAction.Error:
- #if DEBUG
- if (AdapterSwitches.DataSchema.TraceError) {
- Debug.WriteLine("schema error on DataTable \"" + dataSetTable + "\"");
- }
- #endif
- throw ADP.MissingTableSchema(dataSetTable, SourceTable);
- }
- throw ADP.InvalidMissingSchemaAction(schemaAction);
- }
- public override String ToString() {
- return SourceTable;
- }
- sealed internal class DataTableMappingConverter : System.ComponentModel.ExpandableObjectConverter {
- // converter classes should have public ctor
- public DataTableMappingConverter() {
- }
- override public bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
- if (typeof(InstanceDescriptor) == destinationType) {
- return true;
- }
- return base.CanConvertTo(context, destinationType);
- }
- override public object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
- if (null == destinationType) {
- throw ADP.ArgumentNull("destinationType");
- }
- if ((typeof(InstanceDescriptor) == destinationType) && (value is DataTableMapping)) {
- DataTableMapping mapping = (DataTableMapping)value;
- DataColumnMapping[] columnMappings = new DataColumnMapping[mapping.ColumnMappings.Count];
- mapping.ColumnMappings.CopyTo(columnMappings, 0);
- object[] values = new object[] { mapping.SourceTable, mapping.DataSetTable, columnMappings};
- Type[] types = new Type[] { typeof(string), typeof(string), typeof(DataColumnMapping[]) };
- ConstructorInfo ctor = typeof(DataTableMapping).GetConstructor(types);
- return new InstanceDescriptor(ctor, values);
- }
- return base.ConvertTo(context, culture, value, destinationType);
- }
- }
- }
- }
|