Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> постоянное соединение с базой (SQL), игровой сервер 
:(
    Опции темы
Sam3000
Дата 9.9.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 18.8.2006

Репутация: нет
Всего: нет



Как можно реализовать постоянное соединение с базой, не важно какой мУскл или мСскл?
Скачал исходник aocell, эмулятор игрового сервера Anarchy Online, там есть код
Код

    public class MySqlWrapper
    {
        #region MySql Setup...
        /// <summary>
        /// Opens a Public MySql Datareader named 'myreader' to be used in any class that has AO.Core in the using
        /// </summary>
        public MySqlDataReader myreader;
        /// <summary>
        /// Opens a Public Mysql Connection named 'mcc' to be used in any class that has AO.Core in the using
        /// </summary>
        public MySqlConnection mcc;
        /// <summary>
        /// Opens a Public Mysql Command named 'mcom' to be used in any class that has AO.Core in using.
        /// </summary>
        public MySqlCommand mcom;
        #endregion
        #region MySql Read System...
        /// <summary>
        /// Reads SQL Table
        /// </summary>
        /// <param name="SqlQuery">Reads data from SQL DB, SqlQuery =  string SqlQuery = "SELECT * FROM `table` WHERE ID = "+ "'"+charID+"'";</param>
        public void MySqlRead(string SqlQuery)
        {
            //MysqlRead: Create a SqlQuery to send to this wrapper for Reading the DB
           
            mcc = new MySqlConnection(ConfigReadWrite.Instance.CurrentConfig.MysqlConnection);
            mcom = new MySqlCommand(SqlQuery);
            mcom.Connection = mcc;
            mcom.CommandTimeout = 10000;
            mcc.Open();
            myreader = mcom.ExecuteReader();
        }
        #endregion
        #region MySql Update System...
        /// <summary>
        /// Updates Data in SQL Table
        /// </summary>
        /// <param name="SqlQuery">Updates data in SQL DB, SqlQuery = string SqlQuery = "UPDATE `table` SET `collum` = "+data+" WHERE ID = "'"+charID+"'";</param>
        public void MySqlUpdate(string SqlQuery)
        {
            mcc = new MySqlConnection(ConfigReadWrite.Instance.CurrentConfig.MysqlConnection);
            mcom = new MySqlCommand(SqlQuery);
            mcom.Connection = mcc;
            mcom.CommandTimeout = 10000;
            mcc.Open();
            mcom.ExecuteNonQuery();
            mcc.Close();
        }
        #endregion
        #region MySql Insert System...
        /// <summary>
        /// Inserts data to SQL DB
        /// </summary>
        /// <param name="SqlQuery">Insert data into the SQL db, SqlQuery = INSERT INTO `dbname`  VALUES (`item1_value`, `item2_value`, `etc`)  </param>
        public void MySqlInsert(string SqlQuery)
        {
            mcc = new MySqlConnection(ConfigReadWrite.Instance.CurrentConfig.MysqlConnection);
            mcom = new MySqlCommand(SqlQuery);
            mcom.Connection = mcc;
            mcom.CommandTimeout = 10000;
            mcc.Open();
            mcom.ExecuteNonQuery();
            mcc.Close();
        }
        #endregion
        #region MySql Delete System...
        /// <summary>
        /// Deletes data from the SQL Table
        /// </summary>
        /// <param name="SqlQuery">SQL Query to execute DELETE from SQL DB, SqlQuery = DELETE FROM `database` WHERE (`Field` = {value})</param>
        public void MySqlDelete(string SqlQuery)
        {
            mcc = new MySqlConnection(ConfigReadWrite.Instance.CurrentConfig.MysqlConnection);
            mcom = new MySqlCommand(SqlQuery);
            mcom.Connection = mcc;
            mcom.CommandTimeout = 10000;
            mcc.Open();
            mcom.ExecuteNonQuery();
            mcc.Close();
        }
        #endregion
    }

То есть на каждое действие к базе он создаёт новое подключение, а потом закрывает его.
И вообще такой подход актуален?

Если я ничего не путаю, то на си и си++ постоянное подключение реализовано через указатели.

Это сообщение отредактировал(а) Sam3000 - 9.9.2011, 14:07
PM MAIL   Вверх
MasterOfCode
Дата 9.9.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Цитата(Sam3000 @  9.9.2011,  16:05 Найти цитируемый пост)
То есть на каждое действие к базе он создаёт новое подключение, а потом закрывает его.
И вообще такой подход актуален?

Актуален. Открыл соединение, выполнил нужные действия, закрыл соединение чтоб канал не забивал и лишней нагрузку на сервер не было.

Собственно постоянное соединение это то, что находится между строк
Код

mcc = new MySqlConnection(ConfigReadWrite.Instance.CurrentConfig.MysqlConnection);
mcc.Open();
//...
mcc.Close();

Если все же нужно держать соединение открытым постоянно.  То объяви глобальную переменную MySqlConnection, на старт программы открывай соединение (mcc.Open();), на закрытие программы закрывай соединение (mcc.Close();). (Но возможно столкнешься с проблемами)


--------------------
user posted image
PM ICQ   Вверх
Sam3000
Дата 9.9.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 18.8.2006

Репутация: нет
Всего: нет



Цитата

Актуален. Открыл соединение, выполнил нужные действия, закрыл соединение чтоб канал не забивал и лишней нагрузку на сервер не было.

А на открытие/закрытие соединения не больше будет нагрузки и затрат времени с ресурсами?
Цитата

Собственно постоянное соединение это то, что находится между строк
Код

mcc = new MySqlConnection(ConfigReadWrite.Instance.CurrentConfig.MysqlConnection);
mcc.Open();
//...
mcc.Close();

Если все же нужно держать соединение открытым постоянно.  То объяви глобальную переменную MySqlConnection, на старт программы открывай соединение (mcc.Open();), на закрытие программы закрывай соединение (mcc.Close();). (Но возможно столкнешься с проблемами)

А если у нас класс DB в другом файле и соединение используется в разных местах?
PM MAIL   Вверх
Экскалупатор
Дата 10.9.2011, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



Цитата(Sam3000 @  9.9.2011,  13:35 Найти цитируемый пост)

А на открытие/закрытие соединения не больше будет нагрузки и затрат времени с ресурсами?


почитай про пул соединений.


Цитата(Sam3000 @  9.9.2011,  13:35 Найти цитируемый пост)
А если у нас класс DB в другом файле и соединение используется в разных местах? 

а тут скорее всего проблема с архитектурой. сделай класс(ы) для работы с данными и работай с этими классами там где нужно, вообще паттерны в помощь...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0880 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.