Я создал веб-приложение с asp.net
, примерно 100 users
используют его.Соединения SQL Server в приложении ASP.NET
Однако время от времени люди получают сообщение об ошибке, что соединение по-прежнему открыто. Указывая, что он не был закрыт должным образом.
Он появляется в случайных местах, а не в одном конкретном месте и никаких других ошибок перед ним.
Я знаю, что когда у меня есть ошибка в приложении, и он сбой без моего изящества, связанного с ошибкой, соединение остается открытым, и в основном все из-за него будут разбиваться. Это заставило меня подумать, что каждый использует тот же объект соединения, возможно ли, что 2 пользователя могут иметь идеальное время и вызвать функцию, используя DB connection
, в то же время вызывая ошибку? Есть ли способ убедиться, что все используют свои собственные объекты соединения, например, помещают их в свою сессию или что-то еще?
Надеюсь, вы поймете, что я имею в виду, я не думаю, что публикация моего кода поможет, поскольку это происходит в случайных местах моего проекта.
Это подключение к SQL Server
с использованием System.Data.SqlClient
.
Найдите ниже функцию, которая генерирует ошибку. Эта функция вызывается Page_Load, перед ней ничего нет.
public static SqlConnection conn = new SqlConnection("Data Source=Server00\\SQLEXPRESS;Initial Catalog=r2;Integrated Security=true;Connect Timeout=0");
private void populateGameDrop()
{
try
{
conn.Open();
drop_game.Items.Clear();
SqlCommand cmd = conn.CreateCommand();
Access ac = (Access)Session["Access"];
cmd.CommandText = "Select * from dbo.Games where " + ac.GameQuery;
SqlDataReader r = cmd.ExecuteReader();
while (r.Read())
{
drop_game.Items.Add(new ListItem(r["name"].ToString(), r["Abbr"].ToString()));
}
conn.Close();
}
catch (Exception exc)
{
conn.Close();
Log.Error(exc.ToString());
Session["Error"] = exc.ToString();
Response.Redirect("~/YouBrokeIt.aspx");
}
populateServers();
SetSplitScreen();
}
I _think_ рекомендуется открывать и закрывать соединение по запросу. Этот [ответ] (https://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why/10588594#10588594) основан на 'DbContext' Entity Framework, но я думаю, что он применим к простому ADO , слишком. –
Извините, но не имея возможности ** точно определить, какой фрагмент кода вызывает эти проблемы, этот вопрос очень важен. Сначала вам нужно будет сделать еще несколько исследований, чтобы сообщить нам, что * код вызывает проблемы. –
Добавить код того, как вы обращаетесь к «БД», используете ли вы 'using' staments? – 3dd