ObjectDataSource 컨트롤 소스 개체 만들기
업데이트: 2007년 11월
ObjectDataSource 컨트롤의 소스 개체는 ObjectDataSource 컨트롤에서 요청한 대로 내부 데이터 소스에서 데이터를 검색하고 업데이트를 수행합니다. ObjectDataSource 컨트롤의 소스 개체는 ObjectDataSource 컨트롤에서 인스턴스를 만들 수 있는 클래스 또는 ObjectDataSource 컨트롤에서 호출 가능한 public static(Microsoft Visual Basic의 경우 Shared) 메서드를 노출하는 클래스일 수 있습니다.
소스 개체 및 소스 개체를 사용하는 ObjectDataSource 컨트롤이 포함된 ASP.NET 페이지에 대한 예제를 보려면 ObjectDataSource 소스 개체 예제 또는 ObjectDataSource 강력한 형식의 소스 개체 예제를 참조하십시오.
개체 만들기
ObjectDataSource 컨트롤은 소스 개체의 인스턴스를 만들고, 지정된 메서드를 호출하고, 개체에 static 메서드(Visual Basic의 경우 Shared) 대신 인스턴스 메서드가 있는 경우 단일 요청 범위 내에 있는 모든 개체 인스턴스를 삭제합니다. 따라서 개체는 상태 비저장 개체여야 합니다. 즉, 개체는 단일 요청의 범위 내에서 필요한 모든 리소스를 가져오고 해제해야 합니다.
ObjectDataSource 컨트롤의 ObjectCreating 이벤트를 처리하여 소스 개체를 만드는 방법을 제어할 수 있습니다. 소스 개체의 인스턴스를 만들고 ObjectDataSourceEventArgs 클래스의 ObjectInstance 속성을 이 인스턴스로 설정할 수 있습니다. ObjectDataSource 컨트롤은 인스턴스를 직접 만들지 않고 ObjectCreating 이벤트에서 만든 인스턴스를 사용합니다.
클래스 생성자 지정
ObjectDataSource 컨트롤의 소스 개체에서 데이터 검색 및 수정을 위해 호출할 수 있는 public static 메서드(Visual Basic의 경우 Shared)를 노출하는 경우 ObjectDataSource 컨트롤은 이러한 메서드를 직접 호출합니다. ObjectDataSource 컨트롤이 메서드를 호출하기 위해 소스 개체의 인스턴스를 만들어야 할 경우에는 매개 변수를 사용하지 않는 공용 생성자가 개체에 포함되어야 합니다. 소스 개체의 새 인스턴스를 만드는 경우 ObjectDataSource 컨트롤에서 이 생성자를 호출합니다.
소스 개체에 매개 변수가 없는 공용 생성자가 포함되어 있지 않으면 이 항목 앞의 "개체 만들기"에서 설명한 대로 ObjectCreating 이벤트에서 ObjectDataSource 컨트롤에 사용될 소스 개체의 인스턴스를 만들 수 있습니다.
개체 메서드 지정
ObjectDataSource 컨트롤의 소스 개체에는 데이터를 선택, 삽입, 업데이트 또는 삭제하는 데 사용되는 메서드가 여러 개 포함될 수 있습니다. 이러한 메서드는 ObjectDataSource 컨트롤의 SelectMethod, InsertMethod, UpdateMethod 또는 DeleteMethod 속성을 사용하여 식별되는 메서드 이름 및 선택한 작업에 연결된 매개 변수 컬렉션에 있는 매개 변수 이름을 기반으로 ObjectDataSource 컨트롤에서 호출됩니다. 자세한 내용은 ObjectDataSource 컨트롤에 매개 변수 사용을 참조하십시오.
소스 개체에는 데이터 소스의 총 개체 수를 반환하는 선택적 SelectCount 메서드가 포함될 수도 있습니다. 이 메서드는 SelectCountMethod 속성을 사용하여 ObjectDataSource 컨트롤에 의해 식별됩니다. ObjectDataSource 컨트롤은 Select 메서드가 호출된 후에 SelectCount 메서드를 호출하여 페이징할 때 사용할 데이터 소스의 총 레코드 수를 검색합니다.
참고: |
---|
개체가 페이징을 지원하는 경우에는 SelectCount 메서드를 구현하는 것이 좋습니다. 이렇게 하면 GridView 컨트롤 같은 데이터 바인딩된 컨트롤에서 데이터 페이지의 검색을 요청할 레코드 수를 최소화할 수 있습니다. 소스 데이터 개체에서 총 행 수를 제공하는 경우 데이터 바인딩된 컨트롤에서는 각 페이지에 대해 행 페이지를 한 번에 하나만 요청합니다. 총 행 수에 대한 정보가 없으면 데이터 바인딩된 컨트롤에서는 요청된 데이터 페이지의 첫 번째 행부터 시작하여 데이터 소스의 모든 행을 요청하고 현재 페이지에 포함되지 않은 행을 모두 삭제합니다. |
강력한 형식의 개체 작업
소스 개체는 데이터 소스의 데이터를 기반으로 강력한 형식의 개체를 반환하고 받을 수 있습니다. ObjectDataSource 컨트롤은 DataObjectTypeName 속성을 사용하여 이러한 개체의 형식을 식별합니다. 이 시나리오에서는 하나 이상의 매개 변수를 메서드에 전달하지 않고 모든 매개 변수 값이 모여 있는 개체 하나를 전달합니다. 특정 개체 형식을 소스 개체 메서드의 매개 변수로 전달하는 방법에 대한 자세한 내용은 ObjectDataSource 컨트롤에 매개 변수 사용을 참조하십시오.
ObjectDataSource 컨트롤의 ConflictDetection 속성이 CompareAllValues 값으로 설정되어 있고 OldValuesParameterFormatString 속성이 원래 값의 매개 변수와 현재 값의 매개 변수를 구별하는 값으로 설정되어 있는 경우 ObjectDataSource에서는 다음을 수행합니다.
현재 값과 원래 값의 매개 변수를 둘 다 가져오는 Update 메서드를 소스 개체에서 호출합니다.
원래 값의 매개 변수를 가져오는 Delete 메서드를 소스 개체에서 호출합니다.
강력한 형식의 개체를 사용하는 경우 ObjectDataSource 컨트롤은 각각 현재 값과 원래 값으로 채워진 강력한 형식의 개체를 둘 다 사용하는 Update 메서드를 소스 개체에서 호출합니다. 그러나 ObjectDataSource 컨트롤이 Delete 메서드를 호출하고 강력한 형식의 개체를 전달하는 경우 ConflictDetection 또는 OldValuesParameterFormatString 설정에 관계없이 강력한 형식의 개체 하나를 매개 변수로 사용하는 메서드를 호출합니다. ConflictDetection 속성이 OverwriteChanges 값으로 설정되면 Delete 메서드에 전달되는 개체에는 현재 기본 키 값만 채워집니다. 개체의 다른 속성은 null입니다. ConflictDetection 속성이 CompareAllValues 값으로 설정된 경우에는 Delete 메서드에 전달되는 개체에 나머지 개체 속성에 대한 원래 기본 키 값과 원래 값이 채워집니다.
디자이너 작업
필요한 경우 소스 개체를 디자이너(예: Microsoft Visual Web Developer 웹 개발 도구)에 데이터 개체로 기술하는 특성을 해당 소스 개체에 적용할 수 있습니다. 이렇게 하면 선택, 삽입, 업데이트 및 삭제 작업에 사용되는 개체 메서드를 명확하게 식별하여 디자이너를 사용하는 개발자의 환경을 향상시킬 수 있습니다.
개체를 ObjectDataSource 컨트롤에 대한 소스 개체로 식별하려면 다음 예제와 같이 DataObjectAttribute 특성을 사용합니다.
<DataObject(True)> _
Public Class NorthwindEmployee
[DataObject(true)]
public class NorthwindEmployee
메서드를 데이터 개체 메서드로 식별하려면 DataObjectMethodAttribute 특성을 사용합니다. DataObjectMethodAttribute 특성을 적용하는 경우 DataObjectMethodType 열거형 값 중 하나를 포함하여 메서드의 형식(선택, 삽입, 업데이트 또는 삭제)을 식별합니다. 다음 코드 예제에서는 DataObjectMethodAttribute 특성을 사용하여 메서드를 Delete 메서드로 식별합니다.
<DataObjectMethod(DataObjectMethodType.Delete)> _
Public Shared Function DeleteEmployee(EmployeeID As Integer) As Boolean
If Not _initialized Then Initialize()
Dim conn As SqlConnection = New SqlConnection(_connectionString)
Dim cmd As SqlCommand = New SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn)
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID
Try
conn.Open()
If cmd.ExecuteNonQuery() <> 0 Then _
Return False
Catch e As SqlException
' Handle exception.
Finally
conn.Close()
End Try
Return True
End Function
[DataObjectMethod(DataObjectMethodType.Delete)]
public static bool DeleteEmployee(int EmployeeID)
{
if (!_initialized) { Initialize(); }
SqlConnection conn = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn);
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID;
try
{
conn.Open();
if (cmd.ExecuteNonQuery() == 0)
return false;
}
catch (SqlException e)
{
// Handle exception.
}
finally
{
conn.Close();
}
return true;
}
참고 항목
개념
ObjectDataSource 컨트롤에 매개 변수 사용