SQL Server 2008의 큰 UDT(ADO.NET)
업데이트: November 2007
개발자는 SQL Server 2005에 도입된 UDT(사용자 정의 형식)를 통해 SQL Server 데이터베이스에 CLR(공용 언어 런타임) 개체를 저장하여 서버의 스칼라 형식 시스템을 확장할 수 있습니다. UDT에는 단일 SQL Server 시스템 데이터 형식으로 구성된 일반적인 별칭 데이터 형식과는 달리 여러 요소 및 동작이 포함될 수 있습니다.
참고: |
---|
큰 UDT에 대한 지원이 향상된 SqlClient를 활용하려면 .NET Framework 3.5 SP1 이상을 설치해야 합니다. |
이전에는 UDT의 최대 크기가 8KB로 제한되었습니다. 그러나 SQL Server 2008에서는 UserDefined 형식인 UDT에 대해 이 제한이 제거되었습니다.
사용자 정의 형식에 대한 자세한 내용은 현재 사용하고 있는 SQL Server 버전에 해당하는 SQL Server 온라인 설명서 버전을 참조하십시오.
SQL Server 2005 |
SQL Server 2008 |
---|---|
GetSchema를 사용하여 UDT 스키마 검색
SqlConnection의 GetSchema 메서드는 데이터베이스 스키마 정보를 DataTable에 반환합니다. 자세한 내용은 SQL Server 스키마 컬렉션(ADO.NET)을 참조하십시오.
UDT의 GetSchemaTable 열 값
SqlDataReader의 GetSchemaTable 메서드는 열 메타데이터를 설명하는 DataTable을 반환합니다. 다음 표에서는 SQL Server 2005와 SQL Server 2008 간의 큰 UDT 열 메타데이터 차이점에 대해 설명합니다.
SqlDataReader 열 |
SQL Server 2005 |
SQL Server 2008 |
---|---|---|
ColumnSize |
경우에 따라 다름 |
경우에 따라 다름 |
NumericPrecision |
255 |
255 |
NumericScale |
255 |
255 |
DataType |
Byte[] |
UDT 인스턴스 |
ProviderSpecificDataType |
SqlTypes.SqlBinary |
UDT 인스턴스 |
ProviderType |
21 (SqlDbType.VarBinary) |
29 (SqlDbType.Udt) |
NonVersionedProviderType |
29 (SqlDbType.Udt) |
29 (SqlDbType.Udt) |
DataTypeName |
SqlDbType.VarBinary |
Database.SchemaName.TypeName과 같이 세 부분으로 지정되는 이름 |
IsLong |
경우에 따라 다름 |
경우에 따라 다름 |
SqlDataReader 고려 사항
SqlDataReader는 큰 UDT 값 검색을 지원하도록 SQL Server 2008에서 확장되었습니다. [SqlDataReader]에서는 현재 사용하고 있는 SQL Server 버전뿐만 아니라 연결 문자열에 지정된 Type System Version에 따라 큰 UDT를 다르게 처리합니다. 자세한 내용은 SQL Server 2008의 새로운 기능(ADO.NET)의 "Type System Version 변경 내용" 섹션을 참조하십시오.
이전 버전의 SQL Server를 사용하는 경우나 Type System Version에 SQL Server 2008을 지정하지 않은 경우에는 SqlDataReader의 다음 메서드가 UDT 인스턴스 대신 SqlBinary를 반환합니다.
이전 버전의 SQL Server를 사용하는 경우나 Type System Version에 SQL Server 2008을 지정하지 않은 경우 다음 메서드는 UDT 인스턴스 대신 Byte[] 배열을 반환합니다.
현재 버전의 ADO.NET에 대해서는 변환이 수행되지 않습니다.
SqlParameter 지정
다음 SqlParameter 속성은 큰 UDT로 작업할 수 있도록 확장되었습니다.
SqlParameter 속성 |
설명 |
---|---|
매개 변수의 값을 나타내는 개체를 가져오거나 설정합니다. 기본값은 null입니다. 이 속성은 SqlBinary, Byte[] 또는 관리 개체일 수 있습니다. |
|
매개 변수의 값을 나타내는 개체를 가져오거나 설정합니다. 기본값은 null입니다. 이 속성은 SqlBinary, Byte[] 또는 관리 개체일 수 있습니다. |
|
확인할 매개 변수 값의 크기를 가져오거나 설정합니다. 기본값은 0입니다. 이 속성은 매개 변수 값의 크기를 나타내는 정수일 수 있습니다. 큰 UDT의 경우 UDT의 실제 크기이거나 -1(알 수 없는 경우)일 수 있습니다. |
데이터 검색 예제
다음 코드 조각에서는 큰 UDT 데이터를 검색하는 방법을 보여 줍니다. connectionString 변수는 SQL Server 데이터베이스에 대한 올바른 연결이 있다고 가정하고 commandString 변수는 기본 키 열이 가장 먼저 나열된 올바른 SELECT 문이 있다고 가정합니다.
using (SqlConnection connection = new SqlConnection(
connectionString, commandString))
{
connection.Open();
SqlCommand command = new SqlCommand(commandString);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// Retrieve the value of the Primary Key column.
int id = reader.GetInt32(0);
// Retrieve the value of the UDT.
LargeUDT udt = (LargeUDT)reader[1];
// You can also use GetSqlValue and GetValue.
// LargeUDT udt = (LargeUDT)reader.GetSqlValue(1);
// LargeUDT udt = (LargeUDT)reader.GetValue(1);
Console.WriteLine(
"ID={0} LargeUDT={1}", id, udt);
}
reader.close
}
Using connection As New SqlConnection( _
connectionString, commandString)
connection.Open()
Dim command As New SqlCommand(commandString, connection)
Dim reader As SqlDataReader
reader = command.ExecuteReader
While reader.Read()
' Retrieve the value of the Primary Key column.
Dim id As Int32 = reader.GetInt32(0)
' Retrieve the value of the UDT.
Dim udt As LargeUDT = CType(reader(1), LargeUDT)
' You can also use GetSqlValue and GetValue.
' Dim udt As LargeUDT = CType(reader.GetSqlValue(1), LargeUDT)
' Dim udt As LargeUDT = CType(reader.GetValue(1), LargeUDT)
' Print values.
Console.WriteLine("ID={0} LargeUDT={1}", id, udt)
End While
reader.Close()
End Using
참고 항목
개념
매개 변수 및 매개 변수 데이터 형식 구성(ADO.NET)