Bahasa
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
Untuk akses klien ke UDT besar, instal paket NuGet Microsoft.Data.SqlClient dan impor Microsoft.Data.SqlClient. Jenis SQL CLR yang menentukan UDT sisi server tetap didefinisikan dalam Microsoft.SqlServer.Server; jangan ganti jenis tersebut dengan tipe penyedia klien.
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 mengembalikan informasi skema database dalam objek DataTable. Untuk informasi selengkapnya, lihat Kumpulan Skema SQL Server.
Nilai-nilai Kolom GetSchemaTable untuk UDT
Metode GetSchemaTable mengembalikan metadata kolom dalam objek DataTable 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
Kelas SqlDataReader ini mendukung nilai UDT besar dalam SQL Server 2008 dan versi yang lebih baru. Bagaimana reader memproses nilai-nilai ini tergantung pada versi SQL Server dan Type System Version di string koneksi. Untuk informasi selengkapnya, lihat ConnectionString .
Ketika Type System Version adalah SQL Server 2005, metode berikut SqlDataReader menggunakan representasi biner UDT besar:
- GetProviderSpecificFieldType mengembalikan Type objek untuk SqlBinary.
- GetProviderSpecificValue dan GetSqlValue mengembalikan SqlBinary nilai.
- GetProviderSpecificValues dan GetSqlValues mengisi array yang disediakan dengan nilai kolom khusus penyedia dan mengembalikan jumlah elemen yang diisi. Nilai UDT besar dalam array tersebut menggunakan SqlBinary.
Untuk pengaturan sistem tipe yang sama, GetValue mengembalikan nilai UDT besar sebagai Byte[].
GetValues mengisi array yang disediakan dengan nilai kolom dan mengembalikan jumlah elemen yang diisi. Nilai UDT besar dalam array tersebut menggunakan Byte[].
Perhatikan bahwa tidak ada konversi yang dibuat untuk versi ADO.NET saat ini.
Menentukan Parameter SQL (SqlParameters)
Properti berikut SqlParameter mendukung 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 yang akan diproses. 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 commandString variabel mengasumsikan pernyataan yang valid SELECT dengan kolom kunci utama yang tercantum terlebih dahulu.
using (SqlConnection connection = new SqlConnection(
connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(commandString, connection);
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)
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