Bagikan melalui


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

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:

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

Lihat juga