Aracılığıyla paylaş


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

yöntemi, GetSchema SqlConnection içinde DataTableveritabanı şeması bilgilerini döndürür. Daha fazla bilgi için bkz . SQL Server Şema Koleksiyonları.

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

yöntemiSqlDataReader, GetSchemaTable 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 255 255
NumericScale 255 255
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üm 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 bir SqlDataReader tarafından işleneceği, kullandığınız SQL Server sürümüne ve bağlantı dizesi belirtilen sürüme Type System Version bağlıdır. Daha fazla bilgi için bkz. ConnectionString.

aşağıdaki yöntemleriSqlDataReader, SQL Server 2005 olarak ayarlandığında UDT Type System Version yerine bir döndürürSqlBinary:

aşağıdaki yöntemler, SQL Server 2005 olarak ayarlandığında UDT Type System Version yerine dizisi döndürürByte[]:

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

SqlParameters Belirtme

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. özelliği , Byte[]veya yönetilen bir nesne olabilirSqlBinary.
SqlValue parametresinin değerini temsil eden bir nesne alır veya ayarlar. Varsayılan olarak null'dur. özelliği , Byte[]veya yönetilen bir nesne olabilirSqlBinary.
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 UD'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. değişkeni, connectionString SQL Server veritabanına geçerli bir bağlantı olduğunu varsayar ve commandString değişken, birincil anahtar sütunu ilk olarak listelenen 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.