public static extern bool LogonUser(
     string userName,
     string domain,
     string password,
     ConnectionKind connectionKind,
     Provider provider,
     out IntPtr token);
Esempio n. 2
0
        /// <summary>
        /// Инициализирует объект процедуры.
        /// </summary>
        /// <param name="commandText">Текст команды (имя процедуры, SQL-скрипт).</param>
        /// <param name="commandType">Тип команды.</param>
        /// <param name="connectionKind">Тип подключения.</param>
        protected BaseCommand(string commandText, CommandType commandType, ConnectionKind connectionKind)
        {
            m_ConnectionKind = connectionKind;
            m_Connection = ConnectionManager.GetConnection(connectionKind);
            m_DBFactory = ConnectionManager.GetDBFactory(connectionKind);

            m_Command = m_Connection.CreateCommand();
            m_Command.Transaction = ConnectionManager.GetCurrentTransaction(connectionKind);
            m_Command.CommandText = commandText;
            m_Command.CommandType = commandType;
        }
        public static string GetConnectionSigh(ConnectionKind connectionKind)
        {
            Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>()));

            if (connectionKind == ConnectionKind.None)
                return NoneConnectionSign.ToString();

            return connectionKind == ConnectionKind.Strict
                ? StrictConnectionSign.ToString()
                : RelativeConnectionSign.ToString();
        }
Esempio n. 4
0
        private PlayerState GetState(ConnectionKind asked)
        {
            var state = GetState();

            if (state != null)
            {
                var actual = (ConnectionKind)Context.Items[nameof(ConnectionKind)];
                if (actual != asked)
                {
                    _logger.LogWarning($"Bad connection type Expected:{asked}, Actual:{actual}");
                    // TODO: once carefully tested, always return null !
                    if (actual == ConnectionKind.Spectator)
                    {
                        return(null);
                    }
                }
            }
            return(state);
        }
Esempio n. 5
0
 /// <summary>
 /// Открывает соединение с БД.
 /// </summary>
 /// <param name="connection">Соединение с базой данных.</param>
 public static void OpenConnection(IDbConnection connection, ConnectionKind connectionKind)
 {
     if (!HasConnectionInCache(connectionKind) || connection.State != ConnectionState.Open)
         connection.Open();
 }
Esempio n. 6
0
 /// <summary>
 /// Определяет, есть ли у нас в кэше соединения (идет ли транзакция).
 /// </summary>
 /// <param name="connectionKind">Тип соединения.</param>
 /// <returns>Есть ли у нас в кэше соединение.</returns>
 public static bool HasConnectionInCache(ConnectionKind connectionKind)
 {
     // Если в кэше соединений есть соединение (идет транзакция),
     // то возвращаем true, иначе false.
     string key = GetConnectionCacheKey(connectionKind);
     return (CacheManager.Cache[key] != null) ? true : false;
 }
Esempio n. 7
0
        public static DbProviderFactory GetDBFactory(ConnectionKind connectionKind)
        {
            if (ConnectionTypeResolve == null)
                throw new InvalidOperationException("Please define ConnectionTypeResolve method.");

            ConnectionType type = ConnectionTypeResolve(connectionKind);
            switch (type)
            {
                case ConnectionType.SQLServer:
                    return SqlClientFactory.Instance;

                case ConnectionType.OLEDB:
                    return OleDbFactory.Instance;

                case ConnectionType.Odbc:
                    return OdbcFactory.Instance;

                default:
                    return SqlClientFactory.Instance;
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Возвращает текущую транзакцию.
        /// </summary>
        /// <param name="connectionKind">Тип соединения.</param>
        /// <returns>Текущая транзакция.</returns>
        public static IDbTransaction GetCurrentTransaction(ConnectionKind connectionKind)
        {
            object o = CacheManager.Cache[GetTransactionCacheKey(connectionKind)];

            if (o == null || !(o is IDbTransaction))
                return null;
            else
                return (IDbTransaction)o;
        }
Esempio n. 9
0
 /// <summary>
 /// Возвращает строку ConnectionString по типу соединения 
 /// из конфигурационного файла
 /// </summary>
 /// <param name="connKind">тип соединения</param>
 /// <returns></returns>
 public static string GetConnectionString(ConnectionKind connKind)
 {
     return (connKind == ConnectionKind.Default)
         ? m_DefaultConnectionString
         : ConfigurationManager.ConnectionStrings[connKind.ToString()].ConnectionString;
 }
Esempio n. 10
0
        private static void removeFromCache(ConnectionKind connectionKind)
        {
            // удаляем соединение их кэша
            CacheManager.Cache.Remove(GetConnectionCacheKey(connectionKind));

            // удаляем транзакцию из кэша
            CacheManager.Cache.Remove(GetTransactionCacheKey(connectionKind));
        }
Esempio n. 11
0
 /// <summary>
 /// Закрывает соединение с БД.
 /// </summary>
 /// <param name="connection">Соединение с базой данных.</param>
 public static void CloseConnection(IDbConnection connection, ConnectionKind connectionKind)
 {
     if (!HasConnectionInCache(connectionKind) || connection.State != ConnectionState.Closed)
         connection.Close();
 }
Esempio n. 12
0
 private IDbConnection GetConnection(ConnectionKind kind)
 {
     return(new MySqlConnection(_connectionString));
 }
Esempio n. 13
0
 /// <summary>
 /// Инициализирует объект процедуры
 /// </summary>
 /// <param name="procedureName">имя процедуры</param>
 /// <param name="connectionKind">тип подключения</param>
 public Procedure(string procedureName, ConnectionKind connectionKind)
     : base(procedureName, CommandType.StoredProcedure, connectionKind)
 {
 }
Esempio n. 14
0
 /// <summary>
 /// Инициализирует объект запроса
 /// </summary>
 /// <param name="sql">sql-запрос</param>
 /// <param name="connectionKind">тип подключения</param>
 public Query(string sql, ConnectionKind connectionKind)
     : base(sql, CommandType.Text, connectionKind)
 {
 }
Esempio n. 15
0
 /// <summary>
 /// Процедура привязки соединения к типу сервера.
 /// </summary>
 /// <param name="kind">Тип соединения.</param>
 /// <returns>Тип сервера.</returns>
 protected ConnectionType ConnectionTypeResolver(ConnectionKind kind)
 {
     return ConnectionType.SQLServer;
 }
Esempio n. 16
0
 /// <summary>
 /// Откатывает транзакцию.
 /// </summary>
 /// <param name="connectionKind">Тип соединения.</param>
 public static void RollbackTransaction(ConnectionKind connectionKind)
 {
     // получаем транзакцию
     IDbTransaction transaction = GetCurrentTransaction(connectionKind);
     try
     {
         transaction.Rollback();
     }
     finally
     {
         IDbConnection connection = GetConnection(connectionKind);
         connection.Close();
         removeFromCache(connectionKind);
     }
 }
Esempio n. 17
0
 /// <summary>
 /// Возвращает ключ для хранения соединения в кэше.
 /// </summary>
 /// <param name="connectionKind">Тип соединения.</param>
 /// <returns>Ключ кэша.</returns>
 private static string GetTransactionCacheKey(ConnectionKind connectionKind)
 {
     return String.Format("Database_Transaction_{0}_{1}", connectionKind, Thread.CurrentThread.ManagedThreadId);
 }
Esempio n. 18
0
 /// <summary>
 /// Завершает транзакцию.
 /// </summary>
 /// <param name="connectionKind">Тип соединения.</param>
 public static void CommitTransaction(ConnectionKind connectionKind)
 {
     // получаем транзакцию
     IDbTransaction transaction = GetCurrentTransaction(connectionKind);
     try
     {
         // делаем Commit
         transaction.Commit();
     }
     finally
     {
         IDbConnection connection = GetConnection(connectionKind);
         connection.Close();
         removeFromCache(connectionKind);
     }
 }
Esempio n. 19
0
        /// <summary>
        /// Начинает транзацию.
        /// </summary>
        /// <param name="connectionKind">Тип соединения.</param>
        public static void BeginTransaction(ConnectionKind connectionKind)
        {
            // получаем соединение
            IDbConnection connection = GetConnection(connectionKind);
            // помещаем соединение в кэш
            CacheManager.Cache[GetConnectionCacheKey(connectionKind)] = connection;

            // получаем транзакцию
            IDbTransaction transaction = GetCurrentTransaction(connectionKind);
            if (transaction == null)
            {
                // если транзакции еще нет, то открываем соединение
                connection.Open();
                // создаем транзакцию
                transaction = connection.BeginTransaction();
                CacheManager.Cache[GetTransactionCacheKey(connectionKind)] = transaction;
            }
            else
            {
                throw new CoreInvalidOperationException(Resources.ResourceManager.GetString("ParallelTransactionException"));
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Возвращает объект соединения с БД.
        /// </summary>
        /// <param name="connectionKind">Тип соединения.</param>
        /// <returns>Соединение.</returns>
        public static IDbConnection GetConnection(ConnectionKind connectionKind)
        {
            IDbConnection conn = null;

            // Если в кэше соединений есть соединение (идет транзакция),
            // то возвращаем его, иначе создаем новое.
            string key = GetConnectionCacheKey(connectionKind);
            object obj = CacheManager.Cache[key];
            if (obj == null || !(obj is IDbConnection))
            {
                conn = GetDBFactory(connectionKind).CreateConnection();
                conn.ConnectionString = GetConnectionString(connectionKind);
            }
            else
                conn = (IDbConnection)obj;

            return conn;
        }