У меня есть страница, где пользователь может вставить какой-то заказ о каком-либо продукте. На этой странице также есть живая статистика, которая обновляется каждые 20 секунд, чтобы отразить текущую цену продукта с использованием таймера asp.net. Эта живая панель, извлекающая эти цены из базы данных.
Когда иногда вставляется заказ, я получаю исключение, говорящее о том, что соединение закрыто и команда вставки не может продолжаться. Я подозреваю, что когда дается команда вставки, если в этот момент обновляется текущее обновление, то им обоим необходимо получить доступ к базе данных, и они используют один и тот же объект SqlConnection. Поэтому, когда один завершает работу, объект подключения закрывается, даже если другой использует тот же объект подключения.
Прежде чем закрывать соединение, как я могу быть уверен, что никакие другие методы не используют это соединение?
Код моего класса соединения приведен ниже, для лучшего понимания -
using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections.Specialized;
using System.IO;
using System.IO.Ports;
public class ConnectionHelper
{
#region Private Variables
static string BOconnectionString = "";
static SqlConnection BOcon = null;
static string STRSconnectionString = "";
static SqlConnection STRScon = null;
static SqlTransaction tSTRSTrans = null;
public static SqlTransaction STRSTrans
{
get { return ConnectionHelper.tSTRSTrans; }
set { ConnectionHelper.tSTRSTrans = value; }
}
#endregion
#region Constructor
ConnectionHelper() { }
#endregion
#region Public Functions
public static SqlConnection getSTRSConnection()
{
STRSconnectionString = ConfigurationManager.ConnectionStrings["STRS_WEB_DB2ConnectionString"].ConnectionString;
try
{
if ((STRScon == null) || (STRScon.State == ConnectionState.Closed))
{
STRScon = new SqlConnection(STRSconnectionString);
STRScon.Open();
//tSTRSTrans = STRScon.BeginTransaction(IsolationLevel.RepeatableRead);
}
}
catch (Exception ex)
{
throw new Exception("Error occurred when Connection is going to be opened" + ex.Message);
}
return STRScon;
}
public static void closeSTRSConnection()
{
if ((STRScon != null) || (STRScon.State == ConnectionState.Open))
{
STRScon.Close();
}
}
#endregion
}
Если метод хочет получить доступ к базе данных, он получает и закрывает соединение следующим образом -
con = ConnectionHelper.getSTRSConnection();
........
........
ConnectionHelper.closeSTRSConnection();