Announcement

Collapse
No announcement yet.

Primary Key auto increment Wert

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Primary Key auto increment Wert

    String query = "Insert Into Measurement (value) values (200)";
    SqlCommand cmd = new SqlCommand(query, con.getConnection());
    SqlDataReader rdr = null;

    try
    {
    con.getConnection().Open();
    rdr = cmd.ExecuteReader();

    ....

    in der Tabelle Measurement ist noch ein Primary Key mit einem "auto increment". Kann ich irgendwie heraus bekommen, welchen Wert der Primary Key automatisch bekommen hat oder ist hierfür eine extra Abfrage notwendig?

    Danke!

  • #2
    Gugst du hier. Select @@Identity sollt man aufgrund von Replikationsproblemen nicht mehr verwenden.

    Comment


    • #3
      Hallo chehilbi,

      davon ausgehend, das Du den SQL Server >= 2005 nutzt: Es gibt da die praktische OUTPUT-Klausel, die man dafür nutzen kann; allemal besser & sicherer als nachher die Identity abzfragen:
      [highlight=SQL]SET NOCOUNT ON;

      CREATE TABLE #Mess
      (myID int IDENTITY(123,1),
      Wert int);
      GO
      DECLARE @myID int;

      INSERT INTO #Mess (Wert) OUTPUT INSERTED.myID VALUES (200);
      INSERT INTO #Mess (Wert) OUTPUT INSERTED.myID VALUES (300);
      INSERT INTO #Mess (Wert) OUTPUT INSERTED.myID VALUES (400);
      GO
      DROP TABLE #Mess
      [/highlight]
      Ergebnis:
      [highlight=code]myID
      -----------
      123

      myID
      -----------
      124

      myID
      -----------
      125
      [/highlight]
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        danke für die tipps aber mit dem letzten komme ich nicht ganz klar. muss dazug sagen bin neuling was sql server 2005 angeht und hab die tabellen über das management studio erstellt.

        wo und wie werden denn die ids abgefragt? das drop löscht doch die tabelle wieder?

        DROP TABLE #Mess

        Comment


        • #5
          ah das dürft doch eigentlich die entsprechende Stelle sein. das heisst meine insert anweisung hat die id als return wert. ist das richtig?

          OUTPUT INSERTED.myID VALUES

          Comment


          • #6
            String query = "Insert Into Measurement (value) Output Inserted.pkMeasureID values (200)";
            SqlCommand cmd = new SqlCommand(query, con.getConnection());
            SqlDataReader rdr = null;
            String ret;

            try
            {
            con.getConnection().Open();
            rdr = cmd.ExecuteReader();

            ret = rdr[0].ToString();
            ret = "Return wert: " + ret;

            con.getConnection().Close();
            }

            wie komme ich an den output in c# ran??? so funkt es nicht???

            Comment


            • #7
              hab die lösung man brauch natürlich ein anderes "Ausführobjekt"

              try
              {
              con.getConnection().Open();

              int pkid = Convert.ToInt32(cmd.ExecuteScalar());
              ret = "Return wert: " + pkid;

              con.getConnection().Close();
              }

              Comment


              • #8
                Aufpassen, ExecuteScalar gibt das erste Feld in der ersten Zeile zurück.
                Du kannst bei deinem Command Objekt Parameter definieren (cmd.Parameters), und auch da kann man definieren welce richtigung es hat (z.B. Output), nach der Abfrage kannst du auf diese Variable zugreifen.

                Für deinen Fall möge es eventuell klappen, aber ein anderes Objekt braucht man nicht zwingend.

                Siehe:
                http://msdn.microsoft.com/en-us/libr...99(VS.80).aspx

                Comment

                Working...
                X