共用方式為


SQL Server 2008 中的大型 UDT (ADO.NET)

更新: November 2007

SQL Server 2005 中引進的使用者定義型別 (UDT) 可透過在 SQL Server 資料庫中儲存 Common Language Runtime (CLR) 物件,讓開發人員擴充伺服器的純量型別 (Scalar Type) 系統。UDT 可以包含多個項目而且可以具有行為,這點與單一 SQL Server 系統資料型別所組成的傳統別名資料型別不同。

注意事項:

您必須安裝 .NET Framework 3.5 SP1 (或更新版本) 才能運用大型 UDT 的強化 SqlClient 支援。

之前 UDT 有 8 KB 的大小上限。在 SQL Server 2008 中,使用 UserDefined 格式的 UDT 已不再具有這項限制。

如需使用者定義型別的完整文件,請參閱您所使用之 SQL Server 版本的《SQL Server 線上叢書》版本。

SQL Server 2005

SQL Server 2008

CLR 使用者定義型別

CLR 使用者定義型別

使用 GetSchema 來擷取 UDT 結構描述

SqlConnectionGetSchema 方法會在 DataTable 中傳回資料庫結構描述資訊。如需詳細資訊,請參閱 SQL Server 結構描述集合 (ADO.NET)

UDT 的 GetSchemaTable 資料行值

SqlDataReaderGetSchemaTable 方法會傳回描述資料行中繼資料的 DataTable。下表將針對 SQL Server 2005 與 SQL Server 2008 之間的大型 UDT 描述資料行中繼資料的差異。

SqlDataReader 資料行

SQL Server 2005

SQL Server 2008

ColumnSize

非固定

非固定

NumericPrecision

255

255

NumericScale

255

255

DataType

Byte[]

UDT 執行個體

ProviderSpecificDataType

SqlTypes.SqlBinary

UDT 執行個體

ProviderType

21 (SqlDbType.VarBinary)

29 (SqlDbType.Udt)

NonVersionedProviderType

29 (SqlDbType.Udt)

29 (SqlDbType.Udt)

DataTypeName

SqlDbType.VarBinary

指定為 Database.SchemaName.TypeName 的三部分名稱。

IsLong

非固定

非固定

SqlDataReader 考量

在 SQL Server 2008 中,SqlDataReader 已擴充,可支援大型 UDT 值的擷取。[SqlDataReader] 處理大型 UDT 值的方式取決於您所使用的 SQL Server 版本,以及連接字串中指定的 Type System Version。如需詳細資訊,請參閱 SQL Server 2008 中的新功能 (ADO.NET) 中的<型別系統版本變更>一節。

在舊版 SQL Server 中或者 Type System Version 沒有指定 SQL Server 2008 時,SqlDataReader 的下列方法會傳回 SqlBinary 而非 UDT 執行個體:

在舊版 SQL Server 中或者 Type System Version 沒有指定 SQL Server 2008 時,下列方法會傳回 Byte[] 的陣列而非 UDT 執行個體:

請注意,尚未針對 ADO.NET 的目前版本進行任何轉換。

指定 SqlParameters

下列 SqlParameter 屬性已經過擴充,可使用大型 UDT。

SqlParameter 屬性

描述

Value

取得或設定代表參數值的物件。預設值為 Null。此屬性可以是 SqlBinary、Byte[] 或 Managed 物件。

SqlValue

取得或設定代表參數值的物件。預設值為 Null。此屬性可以是 SqlBinary、Byte[] 或 Managed 物件。

Size

取得或設定要解析之參數值的大小。預設值為 0。此屬性可以是代表參數值大小的整數。對於大型 UDT 而言,這可能是 UDT 的實際大小,-1 則代表未知。

擷取資料範例

下列程式碼片段將示範如何擷取大型 UDT 資料。connectionString 變數會假設 SQL Server 資料庫的有效連接,而且 commandString 變數會假設先列出主索引鍵資料行的有效 SELECT 陳述式 (Statement)。

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

請參閱

概念

設定參數和參數資料型別 (ADO.NET)

SQL Server 資料型別對應 (ADO.NET)

其他資源

擷取資料庫結構描述資訊 (ADO.NET)

SQL Server 二進位和大數值資料 (ADO.NET)