Dil

Büyük UDT’ler

Kullanıcı tanımlı türler (UDF'ler), bir geliştiricinin ortak dil çalışma zamanı (CLR) nesnelerini SQL Server veritabanında depolayarak sunucunun skaler tür sistemini genişletmesine olanak tanır. UDF'ler birden çok öğe içerebilir ve tek bir SQL Server sistem veri türünden oluşan geleneksel diğer ad veri türlerinden farklı olarak davranışlara sahip olabilir.

Not

Büyük UDT'lere istemci erişimi için Microsoft.Data.SqlClient NuGet paketini yükleyin ve Microsoft.Data.SqlClient içeri aktarın. Sunucu tarafındaki UDT'yi tanımlayan SQL CLR türleri Microsoft.SqlServer.Server içinde kalmaya devam eder; bu türleri istemci sağlayıcısı türleriyle değiştirmeyin.

Daha önce UDF'ler en fazla 8 kilobayt boyutuyla kısıtlanıyordu. SQL Server 2008'de, biçimi UserDefinedolan UDF'ler için bu kısıtlama kaldırılmıştır.

Kullanıcı tanımlı türlerin tam belgeleri için bkz . CLR Kullanıcı Tanımlı Türler.

GetSchema Kullanarak UDT Şemalarını Alma

GetSchema yöntemi, veritabanı şema bilgilerini DataTable nesnesinde döndürür. Daha fazla bilgi için bkz . SQL Server Şema Koleksiyonları.

UDF'ler için GetSchemaTable Sütun Değerleri

GetSchemaTable yöntemi, sütun meta verilerini DataTable nesnesinde döndürür. Aşağıdaki tabloda, SQL Server 2005 ile SQL Server 2008 arasındaki büyük UDF'ler için sütun meta verilerindeki farklar açıklanmaktadır.

SqlDataReader sütunu SQL Server 2005 SQL Server 2008 ve üzeri
ColumnSize Değişir Değişir
NumericPrecision İki yüz elli beş İki yüz elli beş
NumericScale İki yüz elli beş İki yüz elli beş
DataType Byte[] UDT örneği
ProviderSpecificDataType SqlTypes.SqlBinary UDT örneği
ProviderType 21 (SqlDbType.VarBinary) 29 (SqlDbType.Udt)
NonVersionedProviderType 29 (SqlDbType.Udt) 29 (SqlDbType.Udt)
DataTypeName SqlDbType.VarBinary Database.SchemaName.TypeName olarak belirtilen üç bölümlü ad.
IsLong Değişir Değişir

SqlDataReader Ile İlgili Dikkat Edilmesi Gerekenler

SqlDataReader sınıfı SQL Server 2008 ve sonraki sürümlerde büyük UDT değerlerini destekler. Okuyucunun bu değerleri nasıl işlediği, SQL Server sürümüne ve bağlantı dizesindeki Type System Version öğesine bağlıdır. Daha fazla bilgi için bkz. ConnectionString.

Type System Version SQL Server 2005 olduğunda, aşağıdaki SqlDataReader yöntemler büyük UDT'lerin ikili gösterimini kullanır:

Aynı tür sistemi ayarı için GetValue büyük UDT değerini Byte[] döndürür. GetValues sağlanan diziyi sütun değerleriyle doldurur ve doldurulan öğe sayısını döndürür. Bu dizideki büyük UDT değerleri Byte[] kullanır.

geçerli ADO.NET sürümü için dönüştürme yapılmadığını unutmayın.

SqlParameters Belirleme

Aşağıdaki SqlParameter özellikler büyük UDT'leri destekler.

SqlParameter Özelliği Açıklama
Value parametresinin değerini temsil eden bir nesne alır veya ayarlar. Varsayılan olarak null'dur. Özellik, SqlBinary, Byte[] veya bir yönetilen nesne olabilir.
SqlValue parametresinin değerini temsil eden bir nesne alır veya ayarlar. Varsayılan olarak null'dur. Özellik, SqlBinary, Byte[] veya bir yönetilen nesne olabilir.
Size Çözülecek parametre değerinin boyutunu alır veya ayarlar. Varsayılan değer 0'tir. özelliği, parametre değerinin boyutunu temsil eden bir tamsayı olabilir. Büyük UDT'ler için, UDT'nin gerçek boyutu veya bilinmeyen için -1 olabilir.

Veri Alma Örneği

Aşağıdaki kod parçası, büyük UDT verilerinin nasıl alınduğunu gösterir. connectionString değişkeni, SQL Server veritabanına geçerli bir bağlantı olduğunu varsayar ve commandString değişkeni, birincil anahtar sütunu ilk sırada listelenen geçerli bir SELECT deyimi varsayar.

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

Ayrıca bkz.