Avatar billede lasserasch Juniormester
16. juni 2008 - 01:00 Der er 3 kommentarer og
1 løsning

Sætte id for objekt lige efter dets data er gemt i SQL DB.

Hejsa.

Jeg har et spørgsmål til mine objekter generelt.

Jeg har som regl en metode på mine objekter, som kan gemme alle data for objektet i en SQL Database. I denne database er der et Id felt som er unikt. Det bruger jeg som Id feltet på objekter.

F.eks. som herunder :


public class bruger
{
private int _Id;
private string _Name;

public int Id
{
get { return _Id; }
set { _Id = value; }
}
public int Name
{
get { return _Name; }
set { _Name = value; }
}

public void Commit()
{
string query = "";
if Id > 0
query = "update tbusers set name = ..... where id = " + Id;
else
query = "insert into tbusers (name) values (.......)";
osv osv...
}


Problemet opstår når jeg har lavet en ny reference af et objekt som jeg så gemmer, men skal fortsætte med at bruge.

F.eks. :

bruger b1 = new bruger();
b1.name = "Lasse";
b1.commit();

Her vil der blive tilføjet en ny record i min database.
Men hvordan får jeg så sat mit Id for objektet. Der bliver jo ikke retuneret noget fra sql'en som fortælle mig hvilket id nummer der blev givet til den nye record.

Jeg har indtil nu haft en metode som selecter max(Id) fra tabellen, men den er for usikker, for hvad nu hvis der lige netop i det sekund der går mellem jeg gemmer og selecter max(Id) bliver oprettet en anden bruger et andet sted fra.


Hvad gør man her? Kan man få sql'en til at retunere hvilket id nummber den har givet eller griber jeg dette helt forkert an?


Mvh.
Lasse
Avatar billede lasserasch Juniormester
16. juni 2008 - 01:12 #1
Fandt ud af det! Brugte en sqldatareader og kører så 2 statements i samme kald hvor jeg først indsætter rækken og herefter laver en "select IDENT_CURRENT('tbusers') as ID" og retunerer resultatet heraf.

Mvh.
Lasse
Avatar billede arne_v Ekspert
16. juni 2008 - 04:29 #2
Brug SCOPE_IDENTITY() fremfor IDENT_CURRENT('tbusers') !

SCOPE_IDENTITY returnerer den sidste genererede id for din connection og hvis du laver
SELECT lige efter din INSERT, så ved du at det er i den rigtige tabel.

IDENT_CURRENT returnerer den sidste genererede id for en bestemt tabel uanset connection/bruger
og er derfor ikke mere flerbruger sikker end den berygtede MAX metode.
Avatar billede lasserasch Juniormester
11. oktober 2010 - 20:47 #3
Smid svar, så får vi lukket her :-)
Avatar billede arne_v Ekspert
11. oktober 2010 - 21:21 #4
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



Seneste spørgsmål Seneste aktivitet
I dag 10:28 PDFEngine Af barth i Andet software
I går 22:40 Butte indhold i celler Af lurup i Excel
I går 15:24 Power Query Af djsimonsen i Excel
I går 14:43 Hvis ikke på liste, tilføj værdier til liste Af TheLibrarian i Excel
I går 11:33 Windows 11 Af ranni i Windows