Поделиться через


Format Перечисление

Определение

Используется классами SqlUserDefinedTypeAttribute и SqlUserDefinedAggregateAttribute для указания формата сериализации пользовательского типа или агрегатной функции.

public enum class Format
public enum Format
type Format = 
Public Enum Format
Наследование
Format

Поля

Native 1

Формат сериализации использует простейший алгоритм, позволяющий SQL Server сохранять на диске эффективное представление пользовательского типа. Типами, отмеченными для сериализации Native, могут быть только типы значений (структуры в Microsoft Visual C# и в Microsoft Visual Basic .NET) в качестве элементов. Члены в виде ссылочных типов (таких как классы Visual C# или Visual Basic), определенных пользователем или существующих в библиотеках класса .NET (например, String), не поддерживаются.

Unknown 0

Формат сериализации неизвестен.

UserDefined 2

Формат сериализации обеспечивает разработчику полный контроль над форматом двоичных данных, осуществляемый с помощью методов Write(BinaryWriter) и Read(BinaryReader).

Примеры

В следующем примере показан UserDefinedType атрибут определяемого пользователем типа Point. Определяемый пользователем тип упорядочен по байтам, называется Point, имеет метод проверки ValidatePoint и использует собственный формат сериализации.

using Microsoft.Data.SqlClient.Server;
using System.Data.SqlTypes;
using System.Text;

[Serializable]
[Microsoft.Data.SqlClient.Server.SqlUserDefinedType(Format.Native,
     IsByteOrdered = true,
     Name = "Point", ValidationMethodName = "ValidatePoint")]
public struct Point : INullable
{

Комментарии

Это перечисление используется и SqlUserDefinedAggregateAttribute для указания формата сериализации определяемого пользователем типа (определяемого пользователем SqlUserDefinedTypeAttribute типа) или агрегата. К использованию элементов перечисления Native и UserDefined предъявляются особые требования.

  • Format.Native Требования к формату Format.Native :

    • Объект StructLayoutAttribute со значением ValueLayoutKind.Sequential свойства должен применяться к агрегату или определяемому пользователем типу, если он определен в классе, а не в структуре. Это управляет физической структурой полей данных и используется для принудительного последовательного размещения элементов в порядке их отображения. SQL Server использует этот атрибут для определения порядка полей для определяемых пользователем типов с несколькими полями.

    • Тип должен содержать по крайней мере один член (размер сериализованных значений не может быть нулевым).

    • Все поля статистического выражения должны быть непреобразуемыми; то есть они должны иметь общее представление как в управляемой, так и в неуправляемой памяти и не требуют специальной обработки маршалером взаимодействия.

    • Все поля определяемого пользователем типа должны иметь один из следующих типов, которые можно сериализовать: bool, byte, sbyte, shortintlongulonguintdoubleSqlInt16SqlByteSqlInt32floatushort, , SqlInt64, SqlDateTime, SqlSingle, SqlDouble, SqlMoneyили другие типы значений, определенные пользователем, содержащие поля одного из этих типов.

    • В агрегате не должно указываться значение для MaxByteSize.

    • Агрегат не должен содержать поля [NonSerialized].

    • Поля не должны быть помечены как явный макет (с параметром StructLayoutAttribute.Value ).LayoutKind.Explicit

  • Format.UserDefined Требования к формату Format.UserDefined :

    • В агрегате должно быть указано значение для MaxByteSize.

    • Укажите свойство атрибута SqlUserDefinedTypeAttribute.IsByteOrdered . Значение по умолчанию — false.

    • Если опустить какое-либо поле в IBinarySerialize.Read методах или IBinarySerialize.Write , состояние этого поля не сериализуется.

Применяется к