[SQL/ASP.net] Autonumber in database in mail

Pagina: 1
Acties:

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 27-08 12:50

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik heb een applicatie/pagina gebouwd waarbij de gebruikers het 1 en ander moesten in voeren. Ook voerden zij het ID in. Aan de hand van dit ID werd een url gegenereerd en deze werd gemaild naar een admin.

Nu is het zo dat ik om diverse redenen er voor moest kiezen om het nummer te laten auto-nummeren en dus niet meer door de gebruiker kon laten invoeren. (gebruikers gebruikte bv wel eens ingebruikte ID's.. etc)..

Het enige probleem is de mail naar de admin. De url, die de admin in zijn mail kreeg, had normaal het ID al in zich en met 1 klik op de knop kwam de admin meteen op de ingevoerde pagina. Maar hoe doe je dit met en auto-nummer? Deze wordt immers door de database aangemaakt.

Mijn vraag is daarom ook, hoe pakken jullie dit aan? E-bay doet volgens mij precies hetzelfde.

http://www.xbmcfreak.nl/


  • Unipuma
  • Registratie: Juli 2001
  • Laatst online: 06-04-2021
De fraaiste oplossing is om dit toe te voegen met een stored procedure, en dan het ID in een output parameter terug te geven. Door gebruik van @@IDENTITY na de insert krijg je het nummer van de identity kolom terug.

So much fun, it's a miracle it isn't declared illegal: driving a motorcycle


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 27-08 12:50

Erhnam

het Hardware-Hondje :]

Topicstarter
Unipuma schreef op 12 december 2002 @ 13:06:
De fraaiste oplossing is om dit toe te voegen met een stored procedure, en dan het ID in een output parameter terug te geven. Door gebruik van @@IDENTITY na de insert krijg je het nummer van de identity kolom terug.
Zou je dit misschien nader willen toelichten? Bedankt voor je reactie Unipuma

http://www.xbmcfreak.nl/


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Wel, hij zegt toch wat je moet doen?

Maak een stored procedure die het record insert, en die het id (dmv @@identity variabele) van dat record returned.

Zoek eens in de BOL van SQL Server op @@identity en Stored Procedure..
...als ik ervan uit mag gaan dat je SQL Server, MSDE of Access2000 gebruikt...

Welke DBMS gebruik je trouwens?

[ Voor 22% gewijzigd door whoami op 12-12-2002 13:27 ]

https://fgheysels.github.io/


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 27-08 12:50

Erhnam

het Hardware-Hondje :]

Topicstarter
whoami schreef op 12 December 2002 @ 13:26:
Wel, hij zegt toch wat je moet doen?

Maak een stored procedure die het record insert, en die het id (dmv @@identity variabele) van dat record returned.

Zoek eens in de BOL van SQL Server op @@identity en Stored Procedure..
...als ik ervan uit mag gaan dat je SQL Server, MSDE of Access2000 gebruikt...

Welke DBMS gebruik je trouwens?
Okee bedankt voor je reactie.. Dacht al zoiets maar wist het 100% zeker. Maak btw gebruik van MSDE.. met op een andere pc sql2000 server geinstalled.. Die EM is toch best wel handig af en toe ;)

Verder vroeg ik mij het volgende af.. De ID's in de database zijn 13 cijfers lang..
Wat ik wil is dat het auto-nummeren vanaf bv 1 of 1000 begint en dan begint op te lopen. Maar er staan ook al een aantal waardes in (met in totaal 13 cijfers).. zou dit conflicten kunnen opleveren..

Een externe partij voert namelijk nieuwe informatie in maar het is niet de bedoeling dat zij die ID's te zien krijgen.. (voorheen was dat wel zo) vandaar deze oplossing.

Kijk voordat die 1000 naar 1000000000000 is gelopen is dit systeem al lang verouderd ;).. Die methode die jullie beschrijven geeft geen problemen met dat er al hogere waardes in de database staan ?

[ Voor 36% gewijzigd door Erhnam op 12-12-2002 13:42 ]

http://www.xbmcfreak.nl/


  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Volgens mij niet... Zolang je van je ID veld maar een Identity maakt (SQL Server).

Ik gebruik zelf de volgende functie in mijn webservice om records toe te voegen aan mijn database. Ik krijg dan in een DataSet de identity terug van het zojuist ingevoegde record. Misschien kun je er wat mee (en misschien kunnen anderen wat kritiek op deze code leveren qua security / optimalisatie etc.)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Execute an insert SQL-Query
[WebMethod]
public DataSet runInsertQuery(string SQLConnectionString, string sqlQuery)
{
    DataSet XMLDataSet = new DataSet();

    SqlConnection SQLConnection = new SqlConnection(SQLConnectionString);
    try
    { 
        SQLConnection.Open();
        SqlCommand SQLCommand = new SqlCommand(sqlQuery,SQLConnection);
        SQLCommand.ExecuteNonQuery();

        // Get the IDENTITY
        SqlDataAdapter adapter = new SqlDataAdapter();
        sqlQuery = "SELECT @@IDENTITY AS 'Identity'";
        adapter.SelectCommand = new SqlCommand(sqlQuery, SQLConnection);
        adapter.Fill(XMLDataSet);
        return XMLDataSet;
    }
    catch(Exception excep)
    {
        return XMLDataSet;
    }
    finally
    {
        if ( SQLConnection.State == ConnectionState.Open)
        {
            SQLConnection.Close();
        }
    }
}

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Wat maakt het nu voor jou of de klant uit of dat id nu 1, 2, 3 of 45896412 is?
Het is gewoon een intern nummer in de databank, dat je toch niet laat zien?

Ik weet niet precies wat voor gevolgen het zal hebben als je dat veld naar een identity veld omzet....

https://fgheysels.github.io/


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 27-08 12:50

Erhnam

het Hardware-Hondje :]

Topicstarter
whoami schreef op 12 December 2002 @ 14:01:
Wat maakt het nu voor jou of de klant uit of dat id nu 1, 2, 3 of 45896412 is?
Het is gewoon een intern nummer in de databank, dat je toch niet laat zien?
Dat maakt in deze situatie best wel veel uit omdat er diverse partijen aan het systeem werken. De ene voert producten in en mag niet die nummers weten. Andere partijen, kopers, kopen in aan de hand van deze nummers (en zoeken en bestellen precies aan de hand van die nummers). Het is dus niet de bedoeling dat er met deze nummers wordt gerotzooid of geklungeld.

http://www.xbmcfreak.nl/


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Erhnam schreef op 12 december 2002 @ 14:20:
[...]


Het is dus niet de bedoeling dat er met deze nummers wordt gerotzooid of geklungeld.


Ik heb ook niet gezegd dat er mee geklungeld/gerotzooid mag worden. ;)

Zowiezo rotzooi je best niet met PK's in een databank.
Eigenlijk rotzooi je best niet met gelijk welke gegevens in een DB. :+

https://fgheysels.github.io/


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
hmm als je de cursortype op 3 set kun je ook meteen je ID weer ophalen, na een insert of update.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...

Pagina: 1