/// <summary> /// Добавляет новый объект в базу данных. /// </summary> /// <param name="metadataObject">Объект метаданных.</param> /// <param name="tableName">Название таблицы</param> /// <returns></returns> protected int InsertObject(T metadataObject) { if (metadataObject == null) { throw new ArgumentNullException("metadataObject"); } //идентификатор созданного объекта. int createdID = 0; string tableName = this.GetTableName(metadataObject); if (String.IsNullOrEmpty(tableName)) { throw new Exception(String.Format("Не удалось определить конечную таблицу для объекта {0} типа {1}", metadataObject.ToString(), metadataObject.GetType().Name)); } DBObjectDistributedTable table = this.MetadataAdapter.TableActivator.EnsureDistributedTable(this.DBSchemaAdapter, tableName); MetadataQueryBuilder queryBuilder = new MetadataQueryBuilder(table.TablePartition.Table, this.TypeDefinition); string insertQuery = @" {InsertQuery} SELECT SCOPE_IDENTITY() AS CreatedID, @@ROWCOUNT AS AffectedRowsCount" .ReplaceKey("InsertQuery", queryBuilder.InsertQuery); DBCollection <SqlParameter> insertParams = this.CreateInsertParameters(metadataObject); DataRow insertResult = this.DataAdapter.GetDataRow(insertQuery, insertParams.ToArray()); if (insertResult == null) { throw new Exception(string.Format("Не удалось получить результат создания объекта.")); } DataRowReader insertResultReader = new DataRowReader(insertResult); int affectedRowsCount = insertResultReader.GetIntegerValue("AffectedRowsCount"); //если объект по заданному условию уже существовал, устанавливаем идентификатор созданного элемента равный -1. if (affectedRowsCount == 0) { createdID = -1; } //проставляем свойства созданного списка else { createdID = insertResultReader.GetIntegerValue("CreatedID"); if (createdID == 0) { throw new Exception("Не удалось получить идентификатор созданного объекта."); } } //возвращаем идентификатор созданного объекта. return(createdID); }
protected int InsertObject(T metadataObject) { //идентификатор созданного объекта. int createdID = 0; string insertQuery = @" {InsertQuery} SELECT SCOPE_IDENTITY() AS CreatedID, @@ROWCOUNT AS AffectedRowsCount" .ReplaceKey("InsertQuery", this.InsertQuery); DBCollection <SqlParameter> insertParams = this.CreateInsertParameters(metadataObject); DataRow insertResult = this.DataAdapter.GetDataRow(insertQuery, insertParams.ToArray()); if (insertResult == null) { throw new Exception(string.Format("Не удалось получить результат создания объекта.")); } DataRowReader insertResultReader = new DataRowReader(insertResult); int affectedRowsCount = insertResultReader.GetIntegerValue("AffectedRowsCount"); //если объект по заданному условию уже существовал, устанавливаем идентификатор созданного элемента равный -1. if (affectedRowsCount == 0) { createdID = -1; } //проставляем свойства созданного списка else { createdID = insertResultReader.GetIntegerValue("CreatedID"); if (createdID == 0) { throw new Exception("Не удалось получить идентификатор созданного объекта."); } } //возвращаем идентификатор созданного объекта. return(createdID); }
/// <summary> /// Возвращает коллекцию папок репликации. /// </summary> /// <param name="condition">Условие на выборку метаданных.</param> /// <returns></returns> internal DBCollection <ReplicationFolderMetadata> GetReplicationFolders(string condition = null) { DBCollection <ReplicationFolderMetadata> replicationFolders = new DBCollection <ReplicationFolderMetadata>(); string resultQuery = null; if (string.IsNullOrEmpty(condition)) { resultQuery = this.SelectQuery; } else { resultQuery = @"{SelectQuery} WHERE {Condition}" .ReplaceKey("SelectQuery", this.SelectQuery) .ReplaceKey("Condition", condition); } DataTable resultTable = this.DataAdapter.GetDataTable(resultQuery); if (resultTable != null) { //собираем все идентификаторы папок и узлов хранилища //чтобы получить их за отдельный запрос Dictionary <int, FolderMetadata> uniqueFolders = new Dictionary <int, FolderMetadata>(); Dictionary <int, StorageMetadata> uniqueStorages = new Dictionary <int, StorageMetadata>(); //сначала заполняем ключи словарей foreach (DataRow row in resultTable.Rows) { int folderID = DataRowReader.GetIntegerValue(row, "FolderID"); if (folderID > 0 && !uniqueFolders.ContainsKey(folderID)) { uniqueFolders.Add(folderID, null); } int storageID = DataRowReader.GetIntegerValue(row, "StorageID"); if (storageID > 0 && !uniqueStorages.ContainsKey(storageID)) { uniqueStorages.Add(storageID, null); } } //потом получаем объекты по этим ключам и "дозаполняем" словарь if (uniqueFolders.Count > 0) { string foldersIdentities = string.Join(",", uniqueFolders.Keys.ToArray()); string foldersCondition = string.Format("[ID] IN ({0})", foldersIdentities); DBCollection <FolderMetadata> folders = this.MetadataAdapter.FolderAdapter.GetFolders(foldersCondition); foreach (FolderMetadata folder in folders) { if (uniqueFolders.ContainsKey(folder.ID)) { uniqueFolders[folder.ID] = folder; } } } if (uniqueStorages.Count > 0) { string storagesIdentities = string.Join(",", uniqueStorages.Keys.ToArray()); string storagesCondition = string.Format("[ID] IN ({0})", storagesIdentities); DBCollection <StorageMetadata> storages = this.MetadataAdapter.StorageAdapter.GetStorages(storagesCondition); foreach (StorageMetadata storage in storages) { if (uniqueStorages.ContainsKey(storage.ID)) { uniqueStorages[storage.ID] = storage; } } } foreach (DataRow row in resultTable.Rows) { FolderMetadata folder = null; StorageMetadata storage = null; int folderID = DataRowReader.GetIntegerValue(row, "FolderID"); if (folderID > 0 && uniqueFolders.ContainsKey(folderID)) { folder = uniqueFolders[folderID]; } int storageID = DataRowReader.GetIntegerValue(row, "StorageID"); if (storageID > 0 && uniqueStorages.ContainsKey(storageID)) { storage = uniqueStorages[storageID]; } if (folder == null) { int rowID = DataRowReader.GetIntegerValue(row, "ID"); throw new Exception(string.Format("Для строки метаданных папки репликации с идентификатором {0} не найдена папка с идентификатором {1}", rowID, folderID)); } if (storage == null) { int rowID = DataRowReader.GetIntegerValue(row, "ID"); throw new Exception(string.Format("Для строки метаданных папки репликации с идентификатором {0} не найден узел хранилища с идентификатором {1}", rowID, storageID)); } ReplicationFolderMetadata metadata = new ReplicationFolderMetadata(row, folder, storage); replicationFolders.Add(metadata); } } return(replicationFolders); }
public int GetIntegerValue(string columnName, int defaultValue) { int typedValue = DataRowReader.GetIntegerValue(this.Row, columnName, defaultValue); return typedValue; }
public static int GetIntegerValue(DataRow row, string columnName) { return DataRowReader.GetIntegerValue(row, columnName, 0); }