Обработка с подключением к базе данных дважды за одно и то же время - PullRequest
0 голосов
/ 08 мая 2020

Я использую таймер, который вызывает соединение с базой данных каждые 1 мс, и это вызывает проблемы, когда иногда он подключается к базе данных до закрытия предыдущего соединения.

Есть ли способ справиться Эта проблема ?

` protected void timerTest_tick(object sen, EventArgs e)
   {
            string sql = "SELECT * FROM [TableActions] WHERE ID =" + Session["LobbyID"];
            Connection cn = new Connection();
            OleDbDataReader reader = cn.GetReader(sql);
            if (reader.Read())
            {
                Session["GNACode"] = reader.GetString(2);
            }
            cn.closecon();
    }`

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Вы должны переместить Connection cn = new Connection(); в область действия класса

и переместить cn.closecon();, чтобы сформировать событие закрытия.

public class YourForm{
   private static Connection cn = null;
   YourForm(){
     if (cn == null) 
     {
       instance = new Connection();
     }
   }
   protected void timerTest_tick(object sen, EventArgs e)
   {
            string sql = "SELECT * FROM [TableActions] WHERE ID =" + Session["LobbyID"];

            OleDbDataReader reader = cn.GetReader(sql);
            if (reader.Read())
            {
                Session["GNACode"] = reader.GetString(2);
            }

    }

    private void CloseEvent(){
       cn.closecon();
    }
}
0 голосов
/ 08 мая 2020

Переместите экземпляр соединения из вашего метода, чтобы предотвратить его создание при каждом вызове таймера (например, создать класс или использовать экземпляр соединения в родительском классе). Затем вы можете проверить состояние соединения с помощью свойства State перед подключением (см. OleDbConnection.State) и закрыть его после прочтения вашего запроса.

Другой (грязный) способ - обернуть блок кода с помощью try ... инструкция catch.

...