private static DataTable[] ConvertSchemaToDataTables(TypeSchema schema)
 {
     if (schema == null)
     {
         return null;
     }
     IDataSourceViewSchema[] views = schema.GetViews();
     if (views == null)
     {
         return null;
     }
     DataTable[] tableArray = new DataTable[views.Length];
     for (int i = 0; i < views.Length; i++)
     {
         IDataSourceViewSchema schema2 = views[i];
         tableArray[i] = new DataTable(schema2.Name);
         IDataSourceFieldSchema[] fields = schema2.GetFields();
         if (fields != null)
         {
             List<DataColumn> list = new List<DataColumn>();
             for (int j = 0; j < fields.Length; j++)
             {
                 IDataSourceFieldSchema schema3 = fields[j];
                 DataColumn column = new DataColumn {
                     AllowDBNull = schema3.Nullable,
                     AutoIncrement = schema3.Identity,
                     ColumnName = schema3.Name,
                     DataType = schema3.DataType
                 };
                 if (column.DataType == typeof(string))
                 {
                     column.MaxLength = schema3.Length;
                 }
                 column.ReadOnly = schema3.IsReadOnly;
                 column.Unique = schema3.IsUnique;
                 tableArray[i].Columns.Add(column);
                 if (schema3.PrimaryKey)
                 {
                     list.Add(column);
                 }
             }
             if (list.Count > 0)
             {
                 tableArray[i].PrimaryKey = list.ToArray();
             }
         }
     }
     return tableArray;
 }
 protected internal override void OnComplete()
 {
     PropertyDescriptor descriptor;
     MethodInfo deleteMethodInfo = this.DeleteMethodInfo;
     string str = (deleteMethodInfo == null) ? string.Empty : deleteMethodInfo.Name;
     if (this._objectDataSource.DeleteMethod != str)
     {
         descriptor = TypeDescriptor.GetProperties(this._objectDataSource)["DeleteMethod"];
         descriptor.ResetValue(this._objectDataSource);
         descriptor.SetValue(this._objectDataSource, str);
     }
     deleteMethodInfo = this.InsertMethodInfo;
     str = (deleteMethodInfo == null) ? string.Empty : deleteMethodInfo.Name;
     if (this._objectDataSource.InsertMethod != str)
     {
         descriptor = TypeDescriptor.GetProperties(this._objectDataSource)["InsertMethod"];
         descriptor.ResetValue(this._objectDataSource);
         descriptor.SetValue(this._objectDataSource, str);
     }
     deleteMethodInfo = this.SelectMethodInfo;
     str = (deleteMethodInfo == null) ? string.Empty : deleteMethodInfo.Name;
     if (this._objectDataSource.SelectMethod != str)
     {
         descriptor = TypeDescriptor.GetProperties(this._objectDataSource)["SelectMethod"];
         descriptor.ResetValue(this._objectDataSource);
         descriptor.SetValue(this._objectDataSource, str);
     }
     deleteMethodInfo = this.UpdateMethodInfo;
     str = (deleteMethodInfo == null) ? string.Empty : deleteMethodInfo.Name;
     if (this._objectDataSource.UpdateMethod != str)
     {
         descriptor = TypeDescriptor.GetProperties(this._objectDataSource)["UpdateMethod"];
         descriptor.ResetValue(this._objectDataSource);
         descriptor.SetValue(this._objectDataSource, str);
     }
     this._objectDataSource.SelectParameters.Clear();
     deleteMethodInfo = this.SelectMethodInfo;
     try
     {
         IDataSourceSchema schema = new TypeSchema(deleteMethodInfo.ReturnType);
         if (schema != null)
         {
             IDataSourceViewSchema[] views = schema.GetViews();
             if ((views != null) && (views.Length > 0))
             {
                 views[0].GetFields();
             }
         }
     }
     catch (Exception)
     {
     }
     ObjectDataSourceDesigner.MergeParameters(this._objectDataSource.DeleteParameters, this.DeleteMethodInfo, this.DeleteMethodDataObjectType);
     ObjectDataSourceDesigner.MergeParameters(this._objectDataSource.InsertParameters, this.InsertMethodInfo, this.InsertMethodDataObjectType);
     ObjectDataSourceDesigner.MergeParameters(this._objectDataSource.UpdateParameters, this.UpdateMethodInfo, this.UpdateMethodDataObjectType);
     string fullName = string.Empty;
     if (this.DeleteMethodDataObjectType != null)
     {
         fullName = this.DeleteMethodDataObjectType.FullName;
     }
     else if (this.InsertMethodDataObjectType != null)
     {
         fullName = this.InsertMethodDataObjectType.FullName;
     }
     else if (this.UpdateMethodDataObjectType != null)
     {
         fullName = this.UpdateMethodDataObjectType.FullName;
     }
     if (this._objectDataSource.DataObjectTypeName != fullName)
     {
         descriptor = TypeDescriptor.GetProperties(this._objectDataSource)["DataObjectTypeName"];
         descriptor.ResetValue(this._objectDataSource);
         descriptor.SetValue(this._objectDataSource, fullName);
     }
     if (deleteMethodInfo != null)
     {
         this._objectDataSourceDesigner.RefreshSchema(deleteMethodInfo.ReflectedType, deleteMethodInfo.Name, deleteMethodInfo.ReturnType, true);
     }
 }
 internal void RefreshSchema(System.Type objectType, string methodName, System.Type schemaType, bool preferSilent)
 {
     if (((objectType != null) && !string.IsNullOrEmpty(methodName)) && (schemaType != null))
     {
         try
         {
             TypeSchema schema = new TypeSchema(schemaType);
             this._forceSchemaRetrieval = true;
             DataTable[] tables = this.LoadSchema();
             this._forceSchemaRetrieval = false;
             IDataSourceSchema schema2 = (tables == null) ? null : new DataTableArraySchema(tables);
             this.SaveSchema(objectType, methodName, ConvertSchemaToDataTables(schema), schemaType);
             DataTable[] tableArray2 = this.LoadSchema();
             IDataSourceSchema schema3 = (tableArray2 == null) ? null : new DataTableArraySchema(tableArray2);
             if (!DataSourceDesigner.SchemasEquivalent(schema2, schema3))
             {
                 this.OnSchemaRefreshed(EventArgs.Empty);
             }
         }
         catch (Exception exception)
         {
             if (!preferSilent)
             {
                 UIServiceHelper.ShowError(base.Component.Site, exception, System.Design.SR.GetString("ObjectDataSourceDesigner_CannotGetSchema", new object[] { schemaType.FullName }));
             }
         }
     }
 }