Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- GetProviderSpecificFieldType
- GetProviderSpecificValue
- GetProviderSpecificValues
- GetSqlValue
- GetSqlValues
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