public static void GetTableStructureByName(SqlString virtualTableName) { DummyMapper mapper = new DummyMapper(); string classNamespace = typeof(Creative).Namespace; Type type = GetTypeByTableName(virtualTableName.Value); //Creating Select by Dummy table name StringBuilder col = new StringBuilder(); #region Members /*******************************************************/ Dictionary <string, string> tableStructure = GetSqlTableStructure(type); foreach (MemberInfo member in type.GetMembers()) { if (IsRelevant(member)) { string sql_name = string.Empty; string sql_type = string.Empty; string dotNet_name = string.Empty; string dotNet_type = string.Empty; bool isEnum = false; //Verify that memeber is class member of Edge.Data.Object if (((FieldInfo)(member)).FieldType.FullName.Contains(classNamespace)) //Memeber is class member from Edge.Data.Object { //Getting Enum Types if ((((FieldInfo)(member)).FieldType).BaseType == typeof(Enum)) { sql_name = member.Name; sql_type = tableStructure[mapper.GetMap(type, member.Name)]; dotNet_name = member.Name; dotNet_type = ((MemberInfo)(((FieldInfo)(member)).FieldType)).Name; isEnum = true; } //Getting Types that are not Enum if ((((FieldInfo)(member)).FieldType).BaseType != typeof(Enum)) { sql_name = member.Name + "ID"; sql_type = tableStructure[sql_name]; dotNet_name = member.Name + ".ID"; dotNet_type = ((MemberInfo)(((FieldInfo)(member)).FieldType)).Name; } } else { sql_name = mapper.GetMap(type, member.Name); sql_type = tableStructure[sql_name]; dotNet_name = member.Name; dotNet_type = ((MemberInfo)(((FieldInfo)(member)).FieldType)).Name; } //Creating sql select query col.Append(string.Format(" Select '{0}' as 'SQL Name', '{1}' as 'SQL Type', '{2}' as '.Net Name', '{3}' as '.Net Type', '{4}' as 'IsEnum' Union ", sql_name, sql_type, dotNet_name, dotNet_type, isEnum ) ); } } //Removing last "union string" col.Remove(col.Length - 6, 6); //Creating SQL command SqlCommand cmd = new SqlCommand(col.ToString()); try { using (SqlConnection conn = new SqlConnection("Data Source=BI_RND;Initial Catalog=EdgeObjects;Integrated Security=True;Pooling=False")) { conn.Open(); cmd.Connection = conn; using (SqlDataReader reader = cmd.ExecuteReader()) { SqlContext.Pipe.Send(reader); } } } catch (Exception e) { throw new Exception("Could not get table data", e); } /****************************************************************/ #endregion }
public static void GetTableStructureByName(SqlString virtualTableName) { string sqlAssembly = typeof(Creative).Assembly.FullName; string classNamespace = typeof(Creative).Namespace; DummyMapper mapper = new DummyMapper(); #region Getting Type from table name /****************************************************************/ Type type = Type.GetType(string.Format("{0}.{1},{2}", classNamespace, virtualTableName.Value, sqlAssembly)); if (type == null) { Int32 metaPropertyID = 0; string baseValueType = GetMetaPropertyBaseValueType(virtualTableName.Value, SqlInt32.Null, out metaPropertyID); if (string.IsNullOrEmpty(baseValueType)) { return; } type = Type.GetType(string.Format("{0}.{1},{2}", classNamespace, baseValueType, sqlAssembly)); } /****************************************************************/ #endregion //Creating Select by Dummy table name StringBuilder col = new StringBuilder(); #region Members /*******************************************************/ Dictionary <string, string> tableStructure = GetTableStructure(type); foreach (MemberInfo member in type.GetMembers()) { if (IsRelevant(member)) { //Get Params and types string sql_name = string.Empty; string sql_type = string.Empty; string dotNet_name = string.Empty; string dotNet_type = string.Empty; bool isEnum = false; if (((FieldInfo)(member)).FieldType.FullName.Contains(classNamespace)) //Memeber is class member from Edge.Data.Object { //Getting Enum Types if ((((FieldInfo)(member)).FieldType).BaseType == typeof(Enum)) { sql_name = member.Name; sql_type = tableStructure[mapper.GetMap(type, member.Name)]; dotNet_name = member.Name; dotNet_type = ((MemberInfo)(((FieldInfo)(member)).FieldType)).Name; isEnum = true; } //Getting Types that are not Enum if ((((FieldInfo)(member)).FieldType).BaseType != typeof(Enum)) { sql_name = member.Name + "ID"; sql_type = tableStructure[sql_name]; dotNet_name = member.Name + ".ID"; dotNet_type = ((MemberInfo)(((FieldInfo)(member)).FieldType)).Name; } } else { sql_name = mapper.GetMap(type, member.Name); sql_type = tableStructure[sql_name]; dotNet_name = member.Name; dotNet_type = ((MemberInfo)(((FieldInfo)(member)).FieldType)).Name; } //Creating sql select query col.Append(string.Format(" Select '{0}', '{1}', '{2}', '{3}', '{4}' Union ", sql_name, sql_type, dotNet_name, dotNet_type, isEnum ) ); } } //Removing last "union string" col.Remove(col.Length - 5, 5); //Creating SQL command SqlCommand cmd = new SqlCommand(col.ToString()); try { using (SqlConnection conn = new SqlConnection("context connection=true")) { conn.Open(); cmd.Connection = conn; using (SqlDataReader reader = cmd.ExecuteReader()) { SqlContext.Pipe.Send(reader); } } } catch (Exception e) { throw new Exception("Could not get table data", e); } /****************************************************************/ #endregion }