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 UDF'ler için gelişmiş SqlClient desteğinden yararlanmak için .NET Framework 3.5 SP1 (veya üzeri) yüklemeniz gerekir.

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önteminin SqlConnection, veritabanı şeması bilgilerini bir DataTable içinde 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, SqlDataReader nesnesinin sütun meta verilerini açıklayan bir DataTable 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 SQL Server 2008'de başlayarak büyük UDT değerlerinin alınmasını destekleyecek şekilde genişletilmiştir. UDT değerlerinin ne kadar büyük boyutlarda SqlDataReader tarafından işlendiği, kullandığınız SQL Server sürümünün yanı sıra bağlantı dizesinde belirtilen Type System Version sürümüne de bağlıdır. Daha fazla bilgi için bkz. ConnectionString.

SQL Server 2005 olarak ayarlandığında, aşağıdaki SqlDataReader yöntemleri UDT yerine bir SqlBinary döndürür:

SQL Server 2005 olarak ayarlandığı zaman, aşağıdaki yöntemler UDT yerine Byte[] dizisi döndürü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 UDF'lerle çalışacak şekilde genişletilmiştir.

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, geçerli bir SQL Server veritabanı bağlantısını varsayar ve commandString değişkeni, birincil anahtar sütununun ilk sırada listelendiği geçerli bir SELECT deyimini varsayar.

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

Ayrıca bkz.