2013-06-26 1 views
0

기본적으로 나는 데이터베이스에서 정보로 가득 찬 8 개 이상의 목록 상자가있는 곳에서 일하고있는 웹 사이트를 가지고 있습니다. 현재 사용하기 쉽기 때문에 현재 SqlDataSource을 사용하고 있으며 현재 목록 상자에 데이터 바인딩되어 있습니다.SqlDataSource는 항상 데이터베이스 연결을 유지합니까?

SqlDataSource은 항상 연결을 유지합니까? 웹 사이트 아키텍처 관점에서 성능상의 이유뿐만 아니라 보안상의 이유로 끊임없이 불필요한 연결을 제거하고 싶습니다.

+1

_ "사용하기 쉽기 때문에 SqlDataSource를 좋아합니다"_ -하지만 결과의 품질 (유지 관리 가능성)을 고려한 적이 있습니까? –

답변

1

과 같다 : 아니오 SqlDataSource 컨트롤이 연결이되었습니다 수행하는 데 필요한 작업을 즉시 폐쇄되는 것을 보장한다 완료되었습니다.

+0

초기 채우기 후에 목록을 다시 채우는 데 필요한대로 다시 열 수있는 방법이 있습니까? 또는 새로운 selectCommand를 실행할 때마다 다시 초기화해야합니까? –

+0

매번 새 인스턴스를 만들 필요가 없습니다. SelectCommand를 변경하고 필요한 경우 기존 매개 변수를 지우고 필요한 경우 새 매개 변수를 추가 한 다음 데이터 소스의 Select 메서드를 호출하면됩니다. –

0

내가 SqlDataAdapter를 +하는 SqlCommand를 사용하는 데 사용하지만, 지금은 대부분 내가 업데이트의 배치를 할 수 있도록하기 위해 어떤 데이터 어댑터 데이터 판독기 위에 한 확신 할 수 없었다

using(SQLDataReader rdr = <YourSQLCommandVariable>.ExecuteReader()) 
{ 
    rdr.Load(<YourDataTableVariable)) 
} 

이유의 존재를 사용 읽고 삭제합니다. 생각해 보면 오버 헤드를 전혀주지 않으면 서 모든 것을 할 수있는 데이터 어댑터와 같은 클래스를 작성하는 것은 매우 어려울 것입니다. 오버 헤드는 중요하지 않지만 DataSet 객체로 여러 테이블을 조회하지 않으면 사용 위험이 없습니다.

이러한 모든 작업에 대한 오버 헤드는 로컬 컴퓨터에 결과 데이터를 모두 로컬 캐시하는 경우에도 고려해 볼 가치가 있습니다. 즉, SQL 쿼리에 대해 가장 큰 개선 사항은 일정 기간 동안 데이터가 변경되지 않을 경우 SQL 쿼리를 만들지 않는 것입니다. 데이터가 하루에 한 번 업데이트되면 24 시간 동안 캐시하십시오. 캐싱은 최종 사용자에 종속적 인 경우 Session을 통해 수행되거나 HttpContext.Current.Cache 객체를 통해 수행 될 수 있습니다.

0

애플리케이션에서 계층 분리가 필요할 수 있습니다. 웹 프로젝트는 이상적으로 데이터베이스를 모르고 있습니다. 데이터베이스와의 통신을 처리하는 중간 계층 어셈블리가 이상적입니다. 그런 다음 .aspx.cs 또는 Controller에서 MVC를 사용하는지 여부에 따라 미들 티어에 8 개의 호출을 만듭니다 (각각의 목록 상자마다 고유 한 정보가 있다고 가정 할 때 하나씩). 중간 계층은 List<MyObject>과 같은 것을 반환 할 것이고,이리스트 박스를리스트 박스에 바인딩 할 것입니다.

데이터 액세스에 대한 나의 일반적인 패턴은 직접 귀하의 질문에 대한 대답이

using (SqlConnection conn = new SqlConnection("conn string")) 
{ 
    conn.Open(); 
    SqlCommand command = new SqlCommand() 
    { 
     CommandText = "command text", 
     Connection = conn, 
     CommandType = CommandType.StoredProcedure //could be non-stored proc.. but would reccomend stored proc assuming SQL Server 
    }; 

    command.Parameters.Add(new SqlParameter("MyParam", "param1")); 
    command.Parameters.Add(new SqlParameter("MyParam2", "param2")); 

    IDataReader reader = command.ExecuteReader(); 

    while(reader.Read()) 
    { 
    //magic here 
    } 

    conn.Close(); 
} 
관련 문제