The Jackal Skrevet 12. desember 2003 Del Skrevet 12. desember 2003 Sitter å programmerer litt i VB.NET her, og skal sette inn en del verdier i en Access database. Det er 3 aktuelle tabeller, kunde, ordre og artikkel. En kunde kan ha mange ordre, og en ordre kan ha mange artikler. Kundeid (primærnøkkelen i kunde-tabellen) er autonummer, så SQLen som blir kjørt for å sette inn i denne tabellen blir bare : INSERT INTO kunde(navn,kontaktperson,addresse, postnummer,telefont) VALUES (bla,bla,bla,bla,bla); Problemet mitt blir da at jeg må ha tak i kundeiden når jeg skal sette inn en ordre. Hvordan får jeg tak i den? Er ikke alltid jeg kan velge max(kundeid) siden kunden kan eksistere fra før av. Så hva vil den mest effektive måten å finne fram denne? På forhånd takk. Lenke til kommentar
alftore Skrevet 12. desember 2003 Del Skrevet 12. desember 2003 Du kan få tak i kundeiden ved å benytte stored procedures Eksempel http://www.devcity.net/net/article.aspx?alias=msaccess_sp2 Lenke til kommentar
The Jackal Skrevet 19. desember 2003 Forfatter Del Skrevet 19. desember 2003 Nå er vel faktisk ikke stored procedures noe annet enn at man kan ferdigdefinere sql statements. Det i seg selv gjør ikke at jeg kan få tak i kundeiden. Nå er det likevel gunstig å bruke på mange måter, så jeg har valgt å gjøre om til bruk av dette. Det jeg foreløpig har funnet ut, er "SELECT @@IDENTITY" skal returnere siste autoinkrement, men hos meg returnerer den bare 0 hele tiden...noen som vet hvorfor? Lenke til kommentar
alftore Skrevet 19. desember 2003 Del Skrevet 19. desember 2003 Jo det er mulig å returnere id-en ved bruk av stored procedures. Create a stored procedure to perform the INSERT and return the @@IDENTITYvalue as an output parameter, as detailed in the .NET Framework Documentation, in the page "Retrieving Identity or Autonumber Values". evt kan det også gjøres slik uten bruk av stored procedures Dim conn As New SqlConnection("Data Source=(local);Integrated Security=SSPI;Database=test") conn.Open() Dim cmd As New SqlCommand("INSERT MyTable VALUES (@Name) SELECT @@IDENTITY", conn) cmd.CommandType = CommandType.Text Dim Par As SqlParameter Par = cmd.Parameters.Add("@Name", SqlDbType.VarChar) Par.Value = "Jones" Dim rdr As SqlDataReader rdr = cmd.ExecuteReader() rdr.Read() Console.WriteLine(rdr(0).ToString()) rdr.Close() conn.Close() Lenke til kommentar
alftore Skrevet 19. desember 2003 Del Skrevet 19. desember 2003 If you're using SQL Server 7.0 or earlier, use @@IDENTITYinstead of SCOPE_IDENTITY(). For more information on the difference between these features, see SQL Server Books OnLine. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå