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:
- GetProviderSpecificFieldType
- GetProviderSpecificValue
- GetProviderSpecificValues
- GetSqlValue
- GetSqlValues
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