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 })); } } } }