2012-09-25 2 views
0

이것은 아마도 어리석은 질문 일 것입니다. 다시 게시 후 20 개의 이벤트 처리기가 있다고 가정 해 보겠습니다. 이벤트가 시작되기 직전에 데이터베이스에 대한 연결을 열어서 끝나면 바로 닫고 싶습니다. 내 웹 양식에 공개 문과 폐사문을 어디에 넣을 것입니까?이벤트 처리 후 어떤 페이지 기능이 발생합니까?

답변

2

수명주기. 그래서 거기 열어서 Page_PreRender에 닫을 수 있습니다.

하지만 실제로는 열린 연결을 피하는 것이 좋습니다. 열린 연결은 다시 사용할 수 없습니다. 따라서 언제든지 가능한 한 빨리 연결을 닫아야합니다. using-statement을 사용하는 것이 가장 좋습니다.

+0

이것은 제 문제였습니다. 나는 using 문을 사용한 적이 한번도 없었지만 이벤트 사이의 컨텍스트를 추적하고 있기 때문에 각 이벤트에 대해 열고 닫는 것을 원하지 않습니다. 그래서 변경 사항을 저장할 수있을 때까지 끝까지 유지해야합니다. – proseidon

+0

여기서 context_ 트랙이란 의미는 무엇입니까? 연결과 어떤 관련이 있습니까? 우리는 어떤 사건에 대해 말하고 있습니까? 왜 여러 사건이 제기 되었습니까? –

+0

글쎄, 나는 1 개의 텍스트 박스에서 300+ 텍스트 박스까지 (잠재적 인) 변화가있다. 이러한 변경 사항은 데이터베이스에 해당합니다. 원래 textchanged 이벤트에서 개별적으로 변경했지만 데이터베이스에 대한 300 회 이상의 호출은 작동하지 않습니다. 그래서 데이터베이스에 접근하지 않고 모든 것을 변경하도록 설정했습니다. 일단 업데이트가 완료되면 SaveChanges를 한 번 호출하십시오. – proseidon

1

당신이 이벤트는 연결이 열린 것을 보장하려면 따라서 경우 LoadLoacComplete 페이지의 이벤트 사이에 발생하는 포스트 백, 당신은 Load (또는 그 이전) 이벤트에서 열 수있는 ASP.NET page life cycle

을 이해할 필요가있다 LoadComplete 이벤트 (또는 이상)에서 닫으십시오.

그러나 오류가 발생하면 LoadComplete 이벤트가 호출되지 않습니다.

데이터베이스 연결 작업 할 using 문을 사용하는 것이 더 나은 방법입니다 : 빠른보기로

using(var cn = new SqlConnection("..")) 
{ 
    cn.open(); 
    // here your database code 
} 

:

이벤트는 페이지의에서 Page_Load 이벤트 이후에 발생하는 enter image description here

관련 문제