Que signifie un horodatage dans T-Sql en C #?
Je suis en train de développer un modèle objet pour contenir un Serveur Sql en ligne, et je comprends parfaitement la façon de le faire, sauf pour le T-Sql/sql server timestamp. La table est définie comme:
CREATE TABLE activity (
activity_id int
, ip_address varchar(39)
, user_id varchar(255)
, message_text
, dt timestamp
)
Quand je résoudre une ligne de tableau à mon objet, pour un entier ou une chaîne je m'attends à faire quelque chose comme:
ActivityID = (int)dataReader["activity_id"];
IPAddress = (string)dataReader["ip_address"];
Mais que dois-je faire à propos de la colonne timestamp? Il n'y a pas de "timestamp" type de données que je peux trouver n'importe où. Je sais que Sql Server stocke les timestamp comme de 8 octets binaires, mais qu'est-ce normalement l'équivalent de dans .NET?
Modifiées afin d'ajouter: Un peu plus d'informations... c'est une ligne retournée à partir d'une table DB2 sur notre mainframe à venir à travers une vue Sql Server. "Rowversion" n'est pas une option, et DB2 est la remise de la colonne comme un timestamp. Si l'horodatage et la rowversion sont identiques, peut-être que je peux le traiter comme un seul, mais sinon, je suis coincé avec horodatage.
Édité de nouveau à ajouter: Ce projet va me conduire de la noix. Il aura, au moins, être un court voyage. De toute façon, oui @JoelC c'est une vue Sql Server dans une base de données DB2 sur le mainframe. J'ai finalement été en mesure de traquer l'un de nos Administrateurs de base de données, qui explique fièrement que "bien sûr" une base de données DB2 d'HORODATAGE vient à travers comme à un Serveur Sql server vue comme un datetime. De son ton de voix, je suppose que les noobs ne savent pas cela. C'est pourquoi il l'a nommé "datetime" dans le réel, Duh! (Je lui ai donné un nom différent dans mon exemple, afin de ne pas déclencher le commentaire sur les conventions de nommage -- le diagramme de modèle de données réelles dit que c'est un TIMESTAMP et le nomme timestamp). Donc, dans ce cas, apparemment, on doit le jeter en DateTime. Je pense que je peut commencer à envisager de devenir un administrateur de base de sorte que j'ai, trop, peut conduire à des programmeurs fous. Désolé si j'ai induit en erreur un des intervenants à cette question, c'était involontaire, comme je l'ai été attend en fait à un horodatage à être, ainsi, un timestamp. Je suis bête. Merci surtout à Microsoft pour nommer un tableau d'octets type de données d'un "timestamp" quand il n'a rien à voir avec les dates et les heures. Je n'ai pas la plus vague idée de la réponse à marquer comme Réponse. Soupir.
source d'informationauteur Cyberherbalist
Vous devez vous connecter pour publier un commentaire.
Le nom du Serveur Sql de type de données timestamp est source de confusion. C'est vraiment mieux d'y penser plus comme un numéro de version) — il n'y a pas d'informations de date/heure dans n'importe où. En fait, en tant que de Sql Server 2008, le type a été renommé "rowversion".
La plupart du temps vous voulez que le
datetime
type dans Sql Server au lieu de cela, les cartes facilement pour DateTime en C#, ou peut-être datetime2 si vous avez une version de Sql Server qui prend en charge. La Documentation sur le type timestamp est ici:http://msdn.microsoft.com/en-us/library/ms182776(v=sql.90).aspx
Si vous devez vraiment carte de colonne de type timestamp, la correspondance la plus proche est probablement un bon vieux
long
(ou peut-être ulong), mais je n'ai aucune idée de la façon dont sql server gère l'octet de commande ou grand/petit endien-ness vs C#.Selon ce post
vous aurez à le jeter à un tableau d'octets.
C'est un
byte[]
avec unLength
de8
.lors de la récupération de la base de données
lors du passage dans la base de données