Format Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Используется классами SqlUserDefinedTypeAttribute и SqlUserDefinedAggregateAttribute для указания формата сериализации пользовательского типа или агрегатной функции.
public enum class Format
public enum Format
type Format =
Public Enum Format
- Наследование
-
Format
Поля
Native | 1 | Формат сериализации использует простейший алгоритм, позволяющий SQL Server сохранять на диске эффективное представление пользовательского типа. Типами, отмеченными для сериализации |
Unknown | 0 | Формат сериализации неизвестен. |
UserDefined | 2 | Формат сериализации обеспечивает разработчику полный контроль над форматом двоичных данных, осуществляемый с помощью методов Write(BinaryWriter) и Read(BinaryReader). |
Примеры
В следующем примере показан UserDefinedType
атрибут определяемого пользователем типа 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
,ushort
short
,int
SqlSingleSqlInt32SqlInt64SqlInt16SqlDateTimeSqlDoubleuint
ulong
SqlMoneylong
float
double
SqlByteили другие типы значений, определенные пользователем, содержащие поля одного из этих типов.Статистическое выражение не должно указывать значение для
MaxByteSize
.Агрегат не должен содержать поля [NonSerialized].
Поля не должны быть помечены как явный макет (с значением StructLayoutAttribute.ValueLayoutKind.Explicit).
Format.UserDefined
Требования к форматуFormat.UserDefined
:Статистическое выражение должно указывать значение для
MaxByteSize
.Укажите свойство атрибута SqlUserDefinedTypeAttribute.IsByteOrdered . Значение по умолчанию —
false
.Если опустить какое-либо поле в методах IBinarySerialize.Read или IBinarySerialize.Write , состояние этого поля не сериализуется.