Avatar billede signori Nybegynder
02. august 2006 - 23:44 Der er 8 kommentarer og
1 løsning

hvordan tjekker jeg et timestamp (T-SQL)

Hej,

jeg har en database der bruger TimeStamp typen til at tjekke samtidighed. I min C# applikation anvender jeg business objects og ikke dataset. Når et objekt initialiseres med data fra databasen, indlæser jeg timestamp fra den pågældende tuble. Mit business object har en attribut stamp som er et byte[] på 8 bytes, hvilket stemmer overens med MS SQL timestamp typen. Hertil går det fint.

Nu vil jeg gerne lave en ændring i et af mine objekter og efterfølgende opdatere databasen. Mit problem er bare at få MS SQL til at æde mit objekts timestamp. Jeg har prøvet med følgende:

update (xx,yy) where oid=ZZ and timestamp = "timestamparrayet"
det går ikke så jeg prøver:

update (xx,yy) where oid=ZZ and timestamp = "timestamparrayet[0]+timestamparrayet[1]..timestamparrayet[7]

det går heller ikke. I første eksempel kastes der en exception. I andet eksempel får jeg ingen Exception men desværre bliver den pågældende tuble ikke opdateret - sikkert fordi mit timestamp ikke findes i databasen.

Hvordan skal jeg formatere mit timestamp?
Avatar billede arne_v Ekspert
03. august 2006 - 00:08 #1
parameters

update (xx,yy) where oid=ZZ and timestamp = @ts

og sæt @ts til dit byte array
Avatar billede Syska Mester
03. august 2006 - 00:10 #2
Jeg ville stadig bruge en DataTime object ..... ved jeg nemlig virker.

Så med mindre du har nogen særlig grund til at bruge det andet, så du jo nemt lave koden om til at æde det her....

// ouT
Avatar billede arne_v Ekspert
03. august 2006 - 00:15 #3
et SQLServer timestamp er så vidt jeg ved slet ikke en tids type (selvom den indeholder
tid) - det er en row version
Avatar billede signori Nybegynder
03. august 2006 - 00:15 #4
update (xx,yy) where oid=ZZ and timestamp = @sticker.TimeStamp
kaster en Exception

Hvis jeg udskriver SQL commandtext så får jeg:

update (xx,yy) where oid=ZZ and timestamp = System.Byte[]
hvilket selvfølgelig giver en fejl. Hvad gør jeg forkert?
Avatar billede signori Nybegynder
03. august 2006 - 00:18 #5
Ja - timestamp har ifølge dokumentationen intet med tid at gøre, men er en "unik". Det er DateTime selvfølgelig også. Om man bruger det ene eller andet er vel et spørgsmål om religion. Nu er jeg bare blevet stædig og skal have mit T-SQL timestamp til at fungere :)
Avatar billede signori Nybegynder
03. august 2006 - 00:35 #6
arne_v - fandt ud af det og nu fungerer det fint...endnu engang tak for hjælpen. Smid et svar.
Avatar billede Syska Mester
03. august 2006 - 01:00 #7
kode som virker?
Avatar billede signori Nybegynder
03. august 2006 - 10:05 #8
Som Arne_V skrev opretter jeg en parameter der peger på mit byte[]:

updateCommand.Parameters.AddWithValue("@ts", sticker.TimeStamp);

og så bruger jeg følgende SQL statement:

updateCommand.CommandText = "UPDATE sticker SET text = '" + sticker.Text + "' WHERE OID = " + sticker.OIDNo + " AND stamp = @ts";

det fungerer efter hensigten, og fejler hvis timestamp i databasen bliver ændret før updateCommand bliver eksekveret.
Avatar billede arne_v Ekspert
03. august 2006 - 12:23 #9
det er helt generelt at ved binære data skal man ved INSERT og UPDATE bruge
parameters

og svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester