/// <summary> /// Создаём модуль /// </summary> /// <param name="moduleName"></param> /// <param name="fields"></param> /// <returns></returns> public Guid CreateModule(string moduleName, string description, List<MetadataField> fields) { Guid moduleId = Guid.NewGuid(); // // транзакция для соаздания модуля // using (DbTransaction trans = _connection.BeginTransaction()) { try { #region Добавление информации по модулю using (DbCommand cmd = _connection.CreateCommand()) { cmd.Transaction = trans; // MetadataModules cmd.CommandText = "INSERT INTO MetadataModules VALUES('" + moduleId.ToString() + "', '" + moduleName + "', '" + description + "') "; // MetadataFields foreach (MetadataField f in fields) { cmd.CommandText += "INSERT INTO MetadataFields VALUES('" + f.Name + "', '" + f.SqlType.ToString() + "', '" + f.Description + "', '" + moduleId.ToString() + "', " + f.SqlTypeLength + ") "; } cmd.ExecuteNonQuery(); } #endregion #region Создание физической таблицы модуля using (DbCommand cmd = _connection.CreateCommand()) { // // добавляем к коллекции полей служебные // MetadataField PlowMachineId = new MetadataField(moduleId, "PlowMachineId", "", System.Data.SqlDbType.UniqueIdentifier, 0); MetadataField CreatedOn = new MetadataField(moduleId, "CreatedOn", "", System.Data.SqlDbType.DateTime, 0); MetadataField ModifidedOn = new MetadataField(moduleId, "ModifidedOn", "", System.Data.SqlDbType.DateTime, 0); fields.Add(PlowMachineId); fields.Add(CreatedOn); fields.Add(ModifidedOn); cmd.Transaction = trans; cmd.CommandText = ImplementModuleCreateTableCommand(moduleName, fields); cmd.ExecuteNonQuery(); } #endregion // фиксируем транзакцию trans.Commit(); } catch { // откатываем trans.Rollback(); throw; } } return moduleId; }
/// <summary> /// Список полей для модуля /// </summary> /// <param name="moduleId">идентификатор модуля</param> /// <returns></returns> public List<MetadataField> GetFieldsList(Guid moduleId) { List<MetadataField> fields = new List<MetadataField>(0); // // формируем строку запроса, для выборки иформации по модулям // using (DbCommand cmd = _connection.CreateCommand()) { cmd.CommandText = "SELECT * FROM MetadataFields WHERE ModuleId = '" + moduleId.ToString() + "'"; // // извлекаем полученные данные // using (DbDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { string name = reader.GetString(0); System.Data.SqlDbType type =(System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), reader.GetString(1)); string description = reader.GetString(2); Guid mdlId = reader.GetGuid(3); uint length = (uint)reader.GetByte(4); MetadataField field = new MetadataField(mdlId, name, description, type, length); fields.Add(field); } } } return fields; }
/// <summary> /// Формирование строки с описание столбца /// </summary> /// <param name="builder"></param> /// <param name="field"></param> private void AppendCreateColumnString(StringBuilder builder, MetadataField field) { builder.Append(field.Name + " " + field.SqlType.ToString()); if (IsTypeWithLength(field.SqlType)) { builder.Append("(" + field.SqlTypeLength + ")"); } }
/// <summary> /// Информацио о поле /// </summary> /// <param name="fieldName"></param> /// <returns></returns> public MetadataField GetFieldInfo(string fieldName) { MetadataField field = null; // // формируем строку запроса, для выборки иформации по модулям // using (DbCommand cmd = _connection.CreateCommand()) { cmd.CommandText = "SELECT * FROM MetadataFields WHERE FieldName = '" + fieldName + "'"; // // извлекаем полученные данные // using (DbDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { string name = reader.GetString(0); System.Data.SqlDbType type = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), reader.GetString(1)); string description = reader.GetString(2); Guid mdlId = reader.GetGuid(3); uint length = (uint)reader.GetByte(4); field = new MetadataField(mdlId, name, description, type, length); } } } return field; }