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. Определяемый пользователем тип упорядочен по байтам, называется 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
,short
int
long
ulong
uint
double
SqlInt16SqlByteSqlInt32float
ushort
, , SqlInt64, SqlDateTime, SqlSingle, SqlDouble, SqlMoneyили другие типы значений, определенные пользователем, содержащие поля одного из этих типов.В агрегате не должно указываться значение для
MaxByteSize
.Агрегат не должен содержать поля [NonSerialized].
Поля не должны быть помечены как явный макет (с параметром StructLayoutAttribute.Value ).LayoutKind.Explicit
Format.UserDefined
Требования к форматуFormat.UserDefined
:В агрегате должно быть указано значение для
MaxByteSize
.Укажите свойство атрибута SqlUserDefinedTypeAttribute.IsByteOrdered . Значение по умолчанию —
false
.Если опустить какое-либо поле в IBinarySerialize.Read методах или IBinarySerialize.Write , состояние этого поля не сериализуется.