1 //------------------------------------------------------------------------------
2 // <copyright file="SqlBulkCopyMappingCollection.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">Microsoft</owner>
6 // <owner current="true" primary="false">Microsoft</owner>
7 //------------------------------------------------------------------------------
9 // todo: rename the file
10 // Caution! ndp\fx\src\data\netmodule\sources needs to follow this name change
12 namespace System.Data.SqlClient
16 using System.Data.Common;
17 using System.ComponentModel;
19 using System.Collections;
20 using System.Diagnostics;
22 public sealed class SqlBulkCopyColumnMappingCollection : CollectionBase {
24 private enum MappingSchema {
32 private bool _readOnly;
33 private MappingSchema _mappingSchema = MappingSchema.Undefined;
35 internal SqlBulkCopyColumnMappingCollection() {
38 public SqlBulkCopyColumnMapping this [int index] {
40 return (SqlBulkCopyColumnMapping)this.List[index];
44 internal bool ReadOnly {
54 public SqlBulkCopyColumnMapping Add(SqlBulkCopyColumnMapping bulkCopyColumnMapping) {
56 Debug.Assert(ADP.IsEmpty(bulkCopyColumnMapping.SourceColumn) || bulkCopyColumnMapping._internalSourceColumnOrdinal == -1, "BulkLoadAmbigousSourceColumn");
57 if (((ADP.IsEmpty(bulkCopyColumnMapping.SourceColumn)) && (bulkCopyColumnMapping.SourceOrdinal == -1))
58 || ((ADP.IsEmpty(bulkCopyColumnMapping.DestinationColumn))&&(bulkCopyColumnMapping.DestinationOrdinal == -1))) {
59 throw SQL.BulkLoadNonMatchingColumnMapping();
61 InnerList.Add(bulkCopyColumnMapping);
62 return bulkCopyColumnMapping;
65 public SqlBulkCopyColumnMapping Add(string sourceColumn, string destinationColumn) {
67 SqlBulkCopyColumnMapping column = new SqlBulkCopyColumnMapping (sourceColumn, destinationColumn);
71 public SqlBulkCopyColumnMapping Add(int sourceColumnIndex, string destinationColumn) {
73 SqlBulkCopyColumnMapping column = new SqlBulkCopyColumnMapping (sourceColumnIndex, destinationColumn);
77 public SqlBulkCopyColumnMapping Add(string sourceColumn, int destinationColumnIndex) {
79 SqlBulkCopyColumnMapping column = new SqlBulkCopyColumnMapping (sourceColumn, destinationColumnIndex);
82 public SqlBulkCopyColumnMapping Add(int sourceColumnIndex, int destinationColumnIndex) {
84 SqlBulkCopyColumnMapping column = new SqlBulkCopyColumnMapping (sourceColumnIndex, destinationColumnIndex);
88 private void AssertWriteAccess () {
90 throw SQL.BulkLoadMappingInaccessible();
94 new public void Clear() {
99 public bool Contains(SqlBulkCopyColumnMapping value) {
100 return (-1 != InnerList.IndexOf(value));
103 public void CopyTo(SqlBulkCopyColumnMapping[] array, int index) {
104 InnerList.CopyTo(array, index);
107 internal void CreateDefaultMapping (int columnCount) {
108 for (int i=0; i<columnCount; i++) {
109 InnerList.Add(new SqlBulkCopyColumnMapping (i,i));
113 public int IndexOf(SqlBulkCopyColumnMapping value) {
114 return InnerList.IndexOf(value);
117 public void Insert(int index, SqlBulkCopyColumnMapping value) {
119 InnerList.Insert(index, value);
122 public void Remove(SqlBulkCopyColumnMapping value) {
124 InnerList.Remove(value);
127 new public void RemoveAt(int index) {
129 base.RemoveAt(index);
132 internal void ValidateCollection () {
133 MappingSchema mappingSchema;
134 foreach (SqlBulkCopyColumnMapping a in this) {
135 if (a.SourceOrdinal != -1) {
136 if(a.DestinationOrdinal != -1) {
137 mappingSchema = MappingSchema.OrdinalsOrdinals;
140 mappingSchema = MappingSchema.OrdinalsNames;
144 if(a.DestinationOrdinal != -1) {
145 mappingSchema = MappingSchema.NemesOrdinals;
148 mappingSchema = MappingSchema.NamesNames;
152 if (_mappingSchema == MappingSchema.Undefined) {
153 _mappingSchema = mappingSchema;
156 if (_mappingSchema != mappingSchema) {
157 throw SQL.BulkLoadMappingsNamesOrOrdinalsOnly();