как сделать несколько подключений OleDb к одной базе данных одновременно - PullRequest
0 голосов
/ 22 марта 2020

Я работаю над приложением в Asp. net.
У меня есть класс DBHandler, который обрабатывает подключения к базе данных и запросы,
Конструктор DBHandler открывает новый OleDBConnection, функция Dispose DBHandler закрывает и удаляет соединение, обычно это работает.

Некоторый код из класса DBHandler:

readonly OleDbConnection Con;
        public DBHandler()
        {
            string cs = ConfigurationManager.ConnectionStrings["Database"].ConnectionString;
            Con = new OleDbConnection(cs);
            Con.Open();
        }
public void Dispose()
        {

            Con.Close();
            Con.Dispose();
            Console.WriteLine("db.dispose");
        }

У меня также есть несколько контроллеров / обработчиков запросов, которые обрабатывают get и отправьте запросы,
вот пример кода:

    public class CountryInfoHandler : HttpMessageHandler
    {
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage message, CancellationToken token)
        {
            HttpContent content;
            HttpResponseMessage response = new HttpResponseMessage();
            ......
            CountryInfo info = null;
            using (DBHandler db = new DBHandler())
            {
                if (db.DoesCountryExist(parsedUri[3]))
                {
                    info = db.Countries[parsedUri[3]];
                }
                else
                {
                    info = null;
                }
             }
             content = new StringContent(JsonConvert.SerializeObject(info));
             content.Headers.ContentType.MediaType = "application/json";
             response = new HttpResponseMessage(HttpStatusCode.OK)
             {
                 Content = content
             };
             .....
             return response;
        }
    }


Все работает хорошо, если несколько запросов, которые требуют вызовов к базе данных, не поступают одновременно, когда это происходит, я получаю System.Runtime.InteropServices.SEHException.
Я предполагаю, что это вызвано одновременным открытием нескольких соединений с базой данных. Можно ли как-то предотвратить это или иметь множественные соединения без проблем?

В настоящее время я думаю о том, чтобы сделать его классом stati c с функциями OpenConnection и CloseConnection, которые все работают k для одного соединения, но есть ли лучшие способы?

1 Ответ

0 голосов
/ 23 марта 2020

Я нашел способ обойти эту проблему,
Я сделал класс классом stati c и добавил функции открытия и закрытия,
всякий раз, когда они называются int (значение по умолчанию равно нулю), что представляет количество местоположений, использующих класс, увеличивается или уменьшается,
если оно становится равным 0, я закрываю соединение, если оно было равно нулю и увеличивается, я открываю соединение.

...