如何同时建立到单个数据库的多个OleDb连接

问题描述 投票:-4回答:1

我正在Asp.net中开发一个应用程序。我有一个处理数据库连接和查询的DBHandler类,DBHandler构造函数打开一个新的OleDBConnection,DBHandler的Dispose函数关闭并处理该连接,通常可以正常工作。

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");
        }

我还有一些请求控制器/处理程序,用于处理获取和发布请求,这是一些示例代码:

    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。我猜这是由于同时打开多个数据库连接引起的,有没有办法防止这种情况的发生或有多个连接而没有任何问题?我目前正在考虑使用OpenConnection和CloseConnection函数使其成为一个静态类,这些类都可以在单个连接上工作,但是还有更好的方法吗?

c# asp.net oledbconnection
1个回答
0
投票

我找到了解决此问题的方法,我将类设为静态类,并添加了打开和关闭函数,每当它们被称为int(默认为零)时,该值表示使用该类的位置数量是递增还是递减,如果它变为0,则关闭连接,如果它为零并递增,则打开连接。

© www.soinside.com 2019 - 2024. All rights reserved.