2010-01-18 5 views
1

Pour organiser l'interrogation simplifiée basée sur le minuteur, chaque mise à jour de la table de base de données doit mettre à jour un champ d'horodatage dans une base de données SQL Server 2008 (puis interroger, lire sa valeur, comparer avec la valeur frontale et prendre des décisions sur la lecture de toute la table). En ce qui concerne tout cela, comment je pouvais lire l'heure du système pour l'horodatage de l'écriture? Quel format de données du champ SQL Server utiliser (DataTime ou Time)? Et comment les valeurs de ce format pourraient être comparées?Comment lire l'heure système dans WPF pour mettre à jour le champ d'horodatage SQL Server?

Répondre

2

Parlez-vous d'une colonne de base de données de TIMESTAMP type ?? Ce sont des horodatages binaires que SQL Server mettra à jour en interne - ils n'ont rien à voir avec la date et/ou l'heure - c'est vraiment un compteur encodé binaire. Ces champs sont gérés par le système, ils sont fiables et très précis. Si vous souhaitez utiliser un mécanisme de verrouillage de concurrence optimiste, utilisez ce type de champ. Si vous voulez un champ DATETIME contenant la date et l'heure de la dernière modification, il est préférable d'avoir un déclencheur AFTER INSERT/AFTER UPDATE sur cette table qui définit la dernière colonne mise à jour à la date du jour/temps du SQL Server automatiquement, sans que vous ayez à faire quoi que ce soit à ce sujet.

DATETIME dans SQL Server 2005 est précis à environ 3,33 ms - dans SQL Server 2008, DATETIME2 peut être rendu précis à 100ns, si nécessaire. En tant que tel, ne comptez pas sur une colonne DATETIME pour vérifier à 100% si quelque chose a changé ou non! La précision de 3,33 ms pourrait donner des résultats trompeurs!

+0

Marc, merci pour la clarification! Pourriez-vous, s'il vous plaît, dire, quel type de données C# à utiliser du côté de l'application wpf pour contenir et comparer le type TIMESTAMP de SQL Server? – rem

+1

@rem: le type "natif" pour TIMESTAMP est 'byte [8]' - un tableau de 8 octets. Comme il s'agit de 8 octets, vous pouvez facilement le convertir en 'BIGINT' sur le serveur (CAST (yourcol as BIGINT)) puis utiliser le type .NET' long' pour cela. –

Questions connexes