2011-02-03 2 views
1

У меня есть приложение ASP.NET,Подключение к базе данных занимает время, когда пользователь выходит из системы? или вывести из задачи asp.net

Когда пользователь выходит из системы и сразу же пытается войти в систему, он терпит неудачу, а страница ждет, через 20 секунд вход в систему, i подумайте о соединении с базой данных, например Access, inst closed. Что мне нужно сделать, когда пользователь выйдет из системы, чтобы закрыть все экземпляры кодов базы данных. Я использую этот код, когда пользователь нажимает кнопку логарифмически от:

protected void closeCon() 
{ 
    //to close access 
    OleDbConnection sqlconConnection = (OleDbConnection)DatabaseConnection.Instance.GetConnection(); 

    sqlconConnection.Close(); 
    // to close sql server 
    SqlConnection sqlconConnection1 = (SqlConnection)(SqlConnection)DatabaseConnection.Instance.GetConnection(); 

    if (sqlconConnection1.State != ConnectionState.Closed) 
    { 
     sqlconConnection1.Close();   
    } 
} 
    Session.Abandon(); 
    HttpCookie ObjCookie = new HttpCookie("ourcase"); 
    ObjCookie.Expires = DateTime.Now; 
    HttpContext.Current.Response.Cookies.Add(ObjCookie); 
    Response.Redirect("/login/default.aspx"); 
    System.Web.Security.FormsAuthentication.SignOut(); 
+2

Ваш сайт будет терпеть неудачу, если вы сразу получите несколько запросов. Вы должны полностью переконфигурировать подключение к базе данных; ** не обмениваются примерами подключения **. – SLaks

+0

@ abatishchev, я закрываю все соединения i opend, но все же есть ли способ закрыть любые открытые соединения? – safi

+0

lol - @abatishchev, может быть, вместо того, чтобы спешить, чтобы первыми отредактировать, взять минутку и проверить все свои опечатки? –

ответ

1

dbConn.Close() должен закрыть соединение с базой данных.

В качестве альтернативы, если вы используете подключения к базе данных, вы можете использовать оператор using, который автоматически закроет и удалит объект соединения после его завершения. Это псевдо-код:

using (OleDbConnection dbConn = new OleDbConnection()) 
{ 
    // do your db work here 
} 
+0

@ardman, есть ли способ заставить d.b быть закрытым при выходе пользователя из системы? – safi

+1

@safi: вы можете добавить вызов метода 'Close' в ваш метод« LogOff », если у вас есть метод« LogOff ». Но, честно говоря, вы не должны поддерживать соединение с базой данных открытым в течение этого периода времени. –

+0

@ardman, так что это лучший способ? завершить сеанс при выходе пользователя из системы? – safi

1

Подобно тому, что @Ardman said, всегда обернуть соединение в using заявлении.

using (OleDbConnection dbConn = new OleDbConnection()) 
{ 
    // do your db work here 
} 

Но поскольку доступ supports connection pooling, вы должны открыть и закрыть соединение на каждой поездке в базу данных.

Не каждый раз пользователь входит в систему и отключается.

+0

Уверены ли вы в этом? Проблема с Jet/ACE заключается в том, что создание файла LDB (блокировки) (или запись на тот, который уже используется другими пользователями) - очень дорогостоящий процесс, поэтому с помощью Jet/ACE обычно используется постоянное соединение, а не открытие и несколько раз закрывая его. Я не уверен, что объединение пулов взаимодействует с этим. Я опасаюсь, что у каждого пользователя будет свое собственное соединение, а не на соединение верхнего уровня для всех пользователей. Помните, что это только Jet/ACE, а не база данных сервера ... –

+0

У меня проблема с входом в систему, когда пользователь выписывает, а затем сразу же пытается войти в систему, он терпит неудачу, он ждет, как 10 секунд или 20 секунд .'Session.Abandon(); HttpCookie ObjCookie = новый HttpCookie («наш портфель»); ObjCookie.Expires = DateTime.Now; HttpContext.Current.Response.Cookies.Add (ObjCookie); Response.Redirect ("/ Войти/default.aspx"); System.Web.Security.FormsAuthentication.SignOut(); '; Я использую все возможное, чтобы очистить кеш, чтобы удалить кулинарию и переадресовать, чтобы войти в систему, но когда он снова войдет в систему, он терпит неудачу. – safi

Смежные вопросы