Bahasa

UDT besar

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:

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

Lihat juga