Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tipe yang ditentukan pengguna (UDT) memungkinkan pengembang untuk memperluas sistem tipe skalar server dengan menyimpan objek runtime bahasa umum (CLR) dalam database SQL Server. UDT dapat berisi beberapa elemen dan dapat memiliki perilaku, tidak seperti tipe data alias tradisional, yang terdiri atas satu tipe data sistem SQL Server.
Catatan
Anda harus menginstal .NET Framework 3.5 SP1 (atau yang lebih baru) untuk memanfaatkan dukungan SqlClient yang ditingkatkan untuk UDT besar.
Sebelumnya, UDT dibatasi hingga ukuran maksimum 8 kilobyte. Di SQL Server 2008, pembatasan ini telah dihapus untuk UDT yang memiliki format UserDefined.
Untuk dokumentasi lengkap tipe yang ditentukan pengguna, lihat Tipe Buatan Pengguna CLR.
Mengambil Skema UDT Menggunakan GetSchema
Metode GetSchema dari SqlConnection mengembalikan informasi skema basis data dalam DataTable. Untuk informasi selengkapnya, lihat Kumpulan Skema SQL Server.
Nilai Kolom GetSchemaTable untuk UDT
Metode GetSchemaTable dari SqlDataReader mengembalikan DataTable yang menjelaskan metadata kolom. Tabel berikut menjelaskan perbedaan dalam metadata kolom untuk UDT besar antara SQL Server 2005 dan SQL Server 2008.
| kolom SqlDataReader | SQL Server 2005 | SQL Server 2008 dan yang lebih baru |
|---|---|---|
ColumnSize |
Bervariasi | Bervariasi |
NumericPrecision |
255 | 255 |
NumericScale |
255 | 255 |
DataType |
Byte[] |
Instans UDT |
ProviderSpecificDataType |
SqlTypes.SqlBinary |
Instans UDT |
ProviderType |
21 (SqlDbType.VarBinary) |
29 (SqlDbType.Udt) |
NonVersionedProviderType |
29 (SqlDbType.Udt) |
29 (SqlDbType.Udt) |
DataTypeName |
SqlDbType.VarBinary |
Tiga nama bagian ditetapkan sebagai Database.SchemaName.TypeName. |
IsLong |
Bervariasi | Bervariasi |
Pertimbangan SqlDataReader
SqlDataReader telah diperpanjang mulai dari SQL Server 2008 untuk mendukung pengambilan nilai UDT yang besar. Seberapa besar nilai UDT yang diproses oleh SqlDataReader bergantung pada versi SQL Server yang Anda gunakan, serta pada Type System Version yang ditentukan dalam string koneksi. Untuk informasi selengkapnya, lihat ConnectionString .
Metode SqlDataReader berikut akan mengembalikan SqlBinary alih-alih UDT saat Type System Version diatur ke SQL Server 2005:
- GetProviderSpecificFieldType
- GetProviderSpecificValue
- GetProviderSpecificValues
- GetSqlValue
- GetSqlValues
Metode berikut akan mengembalikan larik Byte[] alih-alih UDT saat Type System Version diatur ke SQL Server 2005:
Perhatikan bahwa tidak ada konversi yang dibuat untuk versi ADO.NET saat ini.
Menentukan SqlParameters
Properti SqlParameter berikut telah diperluas untuk bekerja dengan UDT besar.
| Properti SqlParameter | Deskripsi |
|---|---|
| Value | Mendapatkan atau menetapkan objek yang mewakili nilai parameter. Standarnya adalah null. Properti dapat berupa SqlBinary, Byte[], atau objek terkelola. |
| SqlValue | Mendapatkan atau menetapkan objek yang mewakili nilai parameter. Standarnya adalah null. Properti dapat berupa SqlBinary, Byte[], atau objek terkelola. |
| Size | Mendapatkan atau menetapkan ukuran nilai parameter untuk diselesaikan. Nilai default adalah 0. Properti dapat berupa bilangan bulat yang mewakili ukuran nilai parameter. Untuk UDT besar, ini bisa berupa ukuran UDT yang sebenarnya, atau -1 untuk yang tidak diketahui. |
Mengambil Contoh Data
Fragmen kode berikut menunjukkan cara mengambil data UDT besar. Variabel connectionString mengasumsikan koneksi yang valid ke database SQL Server dan variabel commandString mengasumsikan pernyataan PILIH yang valid dengan kolom kunci utama dicantumkan terlebih dahulu.
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