Partager via


LogRecordSequence.ReserveAndAppend Méthode

Définition

Fait automatiquement une réservation unique et ajoute un enregistrement à la séquence.

Surcharges

ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

Fait automatiquement une réservation unique et ajoute un enregistrement à la séquence. Cette méthode ne peut pas être héritée.

ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

Fait automatiquement une réservation unique et ajoute un enregistrement à la séquence. Cette méthode ne peut pas être héritée.

ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

Fait automatiquement une réservation unique et ajoute un enregistrement à la séquence. Cette méthode ne peut pas être héritée.

public:
 virtual System::IO::Log::SequenceNumber ReserveAndAppend(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ data, System::IO::Log::SequenceNumber userRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions, System::IO::Log::ReservationCollection ^ reservationCollection, ... cli::array <long> ^ reservations);
public System.IO.Log.SequenceNumber ReserveAndAppend (System.Collections.Generic.IList<ArraySegment<byte>> data, System.IO.Log.SequenceNumber userRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions, System.IO.Log.ReservationCollection reservationCollection, params long[] reservations);
abstract member ReserveAndAppend : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
override this.ReserveAndAppend : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
Public Function ReserveAndAppend (data As IList(Of ArraySegment(Of Byte)), userRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions, reservationCollection As ReservationCollection, ParamArray reservations As Long()) As SequenceNumber

Paramètres

data
IList<ArraySegment<Byte>>

Liste des segments de tableau d'octets qui seront concaténés et ajoutés en tant qu'enregistrement.

userRecord
SequenceNumber

Numéro de séquence de l'enregistrement suivant dans l'ordre spécifié par l'utilisateur.

previousRecord
SequenceNumber

Numéro de séquence de l'enregistrement suivant dans l'ordre précédent.

recordAppendOptions
RecordAppendOptions

Une valeur valide de RecordAppendOptions qui spécifie comment les données doivent être écrites.

reservationCollection
ReservationCollection

Collection de réservations dans laquelle les réservations sont effectuées.

reservations
Int64[]

Réservations à effectuer, en octets.

Retours

Numéro de séquence de l'enregistrement du journal ajouté.

Implémente

Exceptions

Un ou plusieurs arguments ne sont pas valides.

Une erreur d'E/S s'est produite lors de l'ajout de l'enregistrement.

La séquence d'enregistrement n'a pas réussi à libérer suffisamment d'espace pour stocker le nouvel enregistrement ou effectuer la réservation.

La méthode a été appelée après la suppression de la séquence.

Un ou plusieurs arguments ont la valeur null.

userRecord ou previousRecord n'est pas compris entre le numéro de base et les derniers numéros de cette séquence.

L'opération ne peut pas être effectuée car la séquence d'enregistrement a été ouverte en lecture seule.

La mémoire disponible n'est pas suffisante pour continuer l'exécution du programme.

L'accès à la séquence de journal spécifiée est refusé par le système d'exploitation.

Aucune réservation assez grande pour data ne se trouve dans reservations.

Remarques

Les données contenues dans le paramètre data seront concaténées dans un tableau d'octets unique pour l'ajouter en tant qu'enregistrement. Toutefois, il n'est pas possible de rétablir les segments du tableau en fractionnant les données lors de la lecture de l'enregistrement.

Les réservations spécifiées sont ajoutées à la collection de réservations fournie dans une opération atomique avec une opération d'ajout d'enregistrement. Si l'ajout échoue, aucun espace n'est réservé.

Normalement, cette méthode doit se terminer avant que l'enregistrement ait été écrit. Pour vous assurer de l'écriture d'un enregistrement, spécifiez l'indicateur ForceFlush à l'aide du paramètre recordAppendOptions ou appelez la méthode Flush.

S’applique à

ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

Fait automatiquement une réservation unique et ajoute un enregistrement à la séquence. Cette méthode ne peut pas être héritée.

public:
 virtual System::IO::Log::SequenceNumber ReserveAndAppend(ArraySegment<System::Byte> data, System::IO::Log::SequenceNumber nextUndoRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions, System::IO::Log::ReservationCollection ^ reservationCollection, ... cli::array <long> ^ reservations);
public System.IO.Log.SequenceNumber ReserveAndAppend (ArraySegment<byte> data, System.IO.Log.SequenceNumber nextUndoRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions, System.IO.Log.ReservationCollection reservationCollection, params long[] reservations);
abstract member ReserveAndAppend : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
override this.ReserveAndAppend : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
Public Function ReserveAndAppend (data As ArraySegment(Of Byte), nextUndoRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions, reservationCollection As ReservationCollection, ParamArray reservations As Long()) As SequenceNumber

Paramètres

data
ArraySegment<Byte>

Liste des segments de tableau d'octets qui seront concaténés et ajoutés en tant qu'enregistrement.

nextUndoRecord
SequenceNumber

Numéro de séquence de l'enregistrement suivant dans l'ordre spécifié par l'utilisateur.

previousRecord
SequenceNumber

Numéro de séquence de l'enregistrement suivant dans l'ordre précédent.

recordAppendOptions
RecordAppendOptions

Une valeur valide de RecordAppendOptions qui spécifie comment les données doivent être écrites.

reservationCollection
ReservationCollection

ReservationCollection qui contient la collection dans laquelle sont effectuées les réservations.

reservations
Int64[]

Réservations à effectuer, en octets.

Retours

Numéro de séquence de l'enregistrement du journal ajouté.

Implémente

Exceptions

nextUndoRecord ou previousRecord n'est pas valide pour cette séquence.

- ou -

data ne peut pas être ajouté car il est supérieur à la taille d'enregistrement maximale.

- ou -

reservations n'a pas été créé par cette séquence d'enregistrement.

Un ou plusieurs arguments ont la valeur null.

nextUndoRecord ou previousRecord n'est pas compris entre le numéro de base et les derniers numéros de cette séquence.

La requête n'a pas pu être exécutée en raison d'une exception d'E/S inattendue.

- ou -

La requête n'a pas pu être exécutée en raison d'une erreur de périphérique d'E/S.

L'opération ne peut pas être effectuée car la séquence d'enregistrement a été ouverte en lecture seule.

La méthode a été appelée après la suppression de la séquence.

La mémoire disponible n'est pas suffisante pour continuer l'exécution du programme.

La séquence d'enregistrement est complète.

L'accès à la séquence de journal spécifiée est refusé par le système d'exploitation.

Aucune réservation assez grande pour data ne se trouve dans reservations.

Exemples

L'exemple suivant montre comment utiliser cette méthode pour faire des réservations. Notez que cette tâche ne peut être effectuée que lors de l’utilisation de la classe LogRecordSequence basée sur un système CLFS.

ReservationCollection reservations = recordSequence.CreateReservationCollection();  
long[] lengthOfUndoRecords = new long[] { 1000 };  
recordSequence.ReserveAndAppend(recordData,  
                                                     userSqn,  
                                                     previousSqn,  
                                                     RecordSequenceAppendOptions.None,  
                                                     reservations,  
                                                     lengthOfUndoRecords);  
recordSequence.Append(undoRecordData,    // If necessary …  
                                    userSqn,  
                                    previousSqn,  
                                    RecordSequenceAppendOptions.ForceFlush,  
                                    reservations);  

Remarques

Les données contenues dans le paramètre data seront concaténées dans un tableau d'octets unique pour l'ajouter en tant qu'enregistrement. Toutefois, il n'est pas possible de rétablir les segments du tableau en fractionnant les données lors de la lecture de l'enregistrement.

Les réservations spécifiées sont ajoutées à la collection de réservations fournie dans une opération atomique avec une opération d'ajout d'enregistrement. Si l'ajout échoue, aucun espace n'est réservé.

Normalement, cette méthode doit se terminer avant que l'enregistrement ait été écrit. Pour vous assurer de l'écriture d'un enregistrement, spécifiez l'indicateur ForceFlush à l'aide du paramètre recordAppendOptions ou appelez la méthode Flush.

S’applique à