예제 #1
0
파일: DataWriter.cs 프로젝트: desla/AS
        /// <summary>
        /// Записать данные в базу.
        /// </summary>
        /// <param name="aData">Данные.</param>
        /// <returns>True - если запись прошла успешно, false - иначе.</returns>
        public bool TryWriteData(DataValue aData)
        {
            try {
                oracleConnection.LockConnection();

                Logger.Debug("Попытка записи данных");

                if (!oracleConnection.IsConnected()) {
                    Logger.Info("Нет подключения к серверу");
                    return false;
                }

                insertDataValue.Connection = oracleConnection.GetOracleConnection();
                insertDataValue.Parameters["ObjectId"].Value = aData.ObjectId;
                insertDataValue.Parameters["DataId"].Value = aData.DataId;
                insertDataValue.Parameters["Value"].Value = aData.Value;
                insertDataValue.Parameters["ValueTime"].Value = aData.ValueTime;

                insertDataValue.ExecuteNonQuery();
                oracleConnection.UpdateLastOperationTime();

                Logger.Debug("Запись выполнена успешно");

                return true;
            }
            catch (Exception ex) {
                oracleConnection.ProcessError(ex);
                return false;
            }
            finally {
                oracleConnection.ReleaseConnection();
            }
        }
예제 #2
0
파일: WagstaffBridge.cs 프로젝트: desla/AS
 /// <summary>
 /// Обратная связь. Происходит при получении данных из DataReader'а, на который подписан текущий WagstaffBridge.
 /// </summary>
 /// <param name="aDataValue">Прочитанные данные.</param>
 public void OnReadedData(DataValue aDataValue)
 {
     if (its.TryWriteData(aDataValue)) {
         Logger.Info("Данные успешно сохранены в ITS");
     }
     else {
         Logger.Info("Данные сохранены в буферную таблицу");
         buffer.StoreData(aDataValue);
     }
 }
예제 #3
0
파일: DataBuffer.cs 프로젝트: desla/AS
        /// <summary>
        /// Попытаться переслать данные из буфера в указанный DataWriter. Метод вызывается таймером.
        /// </summary>
        /// <param name="sender">Object.</param>
        /// <param name="e">ElapsedEventArgs.</param>
        private void TrySendData(object sender = null, ElapsedEventArgs e = null)
        {
            if (!configuration.IsInitialized()) {
                Logger.Debug("Конфигурация не инициализирована");
                return;
            }

            var sendedDataValue = new List<DataValue>();

            try {
                sqlConnection.LockConnection();

                if (!sqlConnection.IsConnected()) {
                    Logger.Info("Нет подключения к серверу");
                    return;
                }

                selectGetData.Connection = sqlConnection.GetSqlConnection();
                // вытаскиваем все данные из таблицы
                using (var reader = selectGetData.ExecuteReader()) {
                    sqlConnection.UpdateLastOperationTime();
                    while (reader.Read()) {
                        var dataValue = new DataValue {
                            Id = reader.GetInt32(0),
                            TypeId = reader.GetInt32(1),
                            ObjectId = reader.GetInt32(2),
                            DataId = reader.GetInt32(3),
                            ValueTime = reader.GetDateTime(4),
                            Value = reader.GetDouble(5),
                            TypeName = reader.GetString(6),
                            ObjectName = reader.GetString(7),
                            DataName = reader.GetString(8)
                        };

                        Logger.Debug("Получены данные из буфера");

                        SetIdsToDataValue(dataValue);

                        if (dataWriter.TryWriteData(dataValue)) {
                            Logger.Info("Данные успешно переданы из буфера в ИТС");
                            sendedDataValue.Add(dataValue);
                        }
                    }
                }
            }
            catch (Exception ex) {
                sqlConnection.ProcessError(ex);
            }
            finally {
                sqlConnection.ReleaseConnection();
            }

            foreach (var dataValue in sendedDataValue) {
                RemoveData(dataValue);
            }
        }
예제 #4
0
파일: DataBuffer.cs 프로젝트: desla/AS
        /// <summary>
        /// Установить данным имена по конфигурации.
        /// </summary>
        /// <param name="aData"></param>
        private void SetNamesToDataValue(DataValue aData)
        {
            var dataInfoList = configuration.DataInfo;
            foreach (var item in dataInfoList) {
                if (item.TypeId == aData.TypeId &&
                    item.ObjectId == aData.ObjectId &&
                    item.DataId == aData.DataId) {
                    aData.TypeName = item.TypeName;
                    aData.ObjectName = item.ObjectName;
                    aData.DataName = item.DataName;
                    return;
                }
            }

            throw new ArgumentException("В конфигурации нет идентификаторов для данных, вставляемых в буфер");
        }
예제 #5
0
파일: DataBuffer.cs 프로젝트: desla/AS
        /// <summary>
        /// Установить данным из буфера все ID по конфигурации
        /// </summary>
        /// <param name="aData"></param>
        private void SetIdsToDataValue(DataValue aData)
        {
            var dataInfoList = configuration.DataInfo;
            foreach (var item in dataInfoList) {
                if (item.TypeName == aData.TypeName &&
                    item.ObjectName == aData.ObjectName &&
                    item.DataName == aData.DataName) {
                    aData.TypeId = item.TypeId;
                    aData.ObjectId = item.ObjectId;
                    aData.DataId = item.DataId;
                    return;
                }
            }

            throw new ArgumentException("В конфигурации нет идентификаторов для данных, полученных из буфера");
        }
예제 #6
0
파일: DataBuffer.cs 프로젝트: desla/AS
        /// <summary>
        /// Удалить данные из буфера.
        /// </summary>
        /// <param name="aData">Данные.</param>
        private void RemoveData(DataValue aData)
        {
            try {
                sqlConnection.LockConnection();
                Logger.Debug("Удаление данных из буфера");

                deleteData.Connection = sqlConnection.GetSqlConnection();
                deleteData.Parameters["Id"].Value = aData.Id;

                deleteData.ExecuteNonQuery();
                sqlConnection.UpdateLastOperationTime();

                Logger.Debug("Данные успешно удалены");
            }
            catch (Exception ex) {
                sqlConnection.ProcessError(ex);
            }
            finally {
                sqlConnection.ReleaseConnection();
            }
        }
예제 #7
0
파일: DataBuffer.cs 프로젝트: desla/AS
        /// <summary>
        /// Сохранить данные в буферную таблицу.
        /// </summary>
        /// <param name="aData">Данные.</param>
        public void StoreData(DataValue aData)
        {
            try {
                sqlConnection.LockConnection();
                Logger.Debug("Сохранение данных в буфер");
                SetNamesToDataValue(aData);

                insertStoreData.Connection = sqlConnection.GetSqlConnection();
                // сохраняем данные в таблицу - буфер
                insertStoreData.Parameters["TypeId"].Value = -1;
                insertStoreData.Parameters["ObjectId"].Value = -1;
                insertStoreData.Parameters["DataId"].Value = -1;
                insertStoreData.Parameters["ValueTime"].Value = aData.ValueTime;
                insertStoreData.Parameters["Value"].Value = aData.Value;
                insertStoreData.Parameters["TypeName"].Value = aData.TypeName;
                insertStoreData.Parameters["ObjectName"].Value = aData.ObjectName;
                insertStoreData.Parameters["DataName"].Value = aData.DataName;

                insertStoreData.ExecuteNonQuery();
                sqlConnection.UpdateLastOperationTime();

                Logger.Debug("Данные успешно сохранены");
            }
            catch (Exception ex) {
                sqlConnection.ProcessError(ex);
            }
            finally {
                sqlConnection.ReleaseConnection();
            }
        }