Autoinrement bei ADO.NET



  • "INSERT INTO [dbo].[inventar_data] ([ID], [gelöscht], [titel], [kategorie], [verli"
    L"ehen], [ordner], [seite]) VALUES (@ID, @gelöscht, @titel, @kategorie, @verliehen"
    L", @ordner, @seite);\r\nSELECT ID, gelöscht, titel, kategorie, verliehen, ordner, s"
    L"eite FROM inventar_data WHERE (ID = @ID)"

    Konfiguriere den Adapter neu und lass beim Insert die ID weg.



  • marcap schrieb:

    Soll ich mal die Einstellungen der ID-Spalte posten?`!

    Ja, mach doch mal...
    Bei mit sieht der "InsertQuery" so aus:

    INSERT INTO [dbo].[Test1] ([Name], [Vorname]) VALUES (@Name, @Vorname);
    SELECT ID, Name, Vorname FROM Test1 WHERE (ID = SCOPE_IDENTITY())
    

    Das XSD der Tabelle sieht bei mir so aus (der untere Teil der xsd-Datei):

    <xs:element name="TestDBDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="TestDBDataSet" msprop:Generator_DataSetName="TestDBDataSet">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Test1" msprop:Generator_UserTableName="Test1" msprop:Generator_RowDeletedName="Test1RowDeleted" msprop:Generator_RowChangedName="Test1RowChanged" msprop:Generator_RowClassName="Test1Row" msprop:Generator_RowChangingName="Test1RowChanging" msprop:Generator_RowEvArgName="Test1RowChangeEvent" msprop:Generator_RowEvHandlerName="Test1RowChangeEventHandler" msprop:Generator_TableClassName="Test1DataTable" msprop:Generator_TableVarName="tableTest1" msprop:Generator_RowDeletingName="Test1RowDeleting" msprop:Generator_TablePropName="Test1">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="ID" msdata:ReadOnly="true" msdata:AutoIncrement="true" msprop:Generator_UserColumnName="ID" msprop:Generator_ColumnPropNameInRow="ID" msprop:Generator_ColumnVarNameInTable="columnID" msprop:Generator_ColumnPropNameInTable="IDColumn" type="xs:long" />
                  <xs:element name="Name" msprop:Generator_UserColumnName="Name" msprop:Generator_ColumnPropNameInRow="Name" msprop:Generator_ColumnVarNameInTable="columnName" msprop:Generator_ColumnPropNameInTable="NameColumn" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="50" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="Vorname" msprop:Generator_UserColumnName="Vorname" msprop:Generator_ColumnPropNameInRow="Vorname" msprop:Generator_ColumnVarNameInTable="columnVorname" msprop:Generator_ColumnPropNameInTable="VornameColumn" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="50" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
        <xs:unique name="Constraint1" msdata:PrimaryKey="true">
          <xs:selector xpath=".//mstns:Test1" />
          <xs:field xpath="mstns:ID" />
        </xs:unique>
      </xs:element>
    

    Und dann erkennt er eigentlich die ID-Spalte als Primary-Key/Autoincrement und lässt sie beim Insert raus...

    @Knuddlbaer: Eigentlich muss man nichts von Hand verändern!!! Wenn man die Tabelle korrekt angelegt hat, sollte alles automatisch funktionieren!



  • Also die Einstellungen kann man auf dem Bild www.marcap.de/idspalte.JPG anschauen 😉

    Hier die XSD:

    <xs:element name="inventarDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="inventarDataSet" msprop:Generator_DataSetName="inventarDataSet">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="inventar_data" msprop:Generator_UserTableName="inventar_data" msprop:Generator_RowDeletedName="inventar_dataRowDeleted" msprop:Generator_RowChangedName="inventar_dataRowChanged" msprop:Generator_RowClassName="inventar_dataRow" msprop:Generator_RowChangingName="inventar_dataRowChanging" msprop:Generator_RowEvArgName="inventar_dataRowChangeEvent" msprop:Generator_RowEvHandlerName="inventar_dataRowChangeEventHandler" msprop:Generator_TableClassName="inventar_dataDataTable" msprop:Generator_TableVarName="tableinventar_data" msprop:Generator_RowDeletingName="inventar_dataRowDeleting" msprop:Generator_TablePropName="inventar_data">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="ID" msdata:AutoIncrement="true" msprop:Generator_UserColumnName="ID" msprop:Generator_ColumnVarNameInTable="columnID" msprop:Generator_ColumnPropNameInRow="ID" msprop:Generator_ColumnPropNameInTable="IDColumn" type="xs:int" />
                  <xs:element name="gelöscht" msprop:Generator_UserColumnName="gelöscht" msprop:Generator_ColumnVarNameInTable="columngelöscht" msprop:Generator_ColumnPropNameInRow="gelöscht" msprop:Generator_ColumnPropNameInTable="gelöschtColumn" type="xs:boolean" minOccurs="0" />
                  <xs:element name="titel" msprop:Generator_UserColumnName="titel" msprop:Generator_ColumnVarNameInTable="columntitel" msprop:Generator_ColumnPropNameInRow="titel" msprop:Generator_ColumnPropNameInTable="titelColumn" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="30" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="kategorie" msprop:Generator_UserColumnName="kategorie" msprop:Generator_ColumnVarNameInTable="columnkategorie" msprop:Generator_ColumnPropNameInRow="kategorie" msprop:Generator_ColumnPropNameInTable="kategorieColumn" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="20" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="verliehen" msprop:Generator_UserColumnName="verliehen" msprop:Generator_ColumnVarNameInTable="columnverliehen" msprop:Generator_ColumnPropNameInRow="verliehen" msprop:Generator_ColumnPropNameInTable="verliehenColumn" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="20" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="ordner" msprop:Generator_UserColumnName="ordner" msprop:Generator_ColumnVarNameInTable="columnordner" msprop:Generator_ColumnPropNameInRow="ordner" msprop:Generator_ColumnPropNameInTable="ordnerColumn" type="xs:int" minOccurs="0" />
                  <xs:element name="seite" msprop:Generator_UserColumnName="seite" msprop:Generator_ColumnVarNameInTable="columnseite" msprop:Generator_ColumnPropNameInRow="seite" msprop:Generator_ColumnPropNameInTable="seiteColumn" type="xs:int" minOccurs="0" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
    


  • [edit]



  • marcap schrieb:

    Hier die XSD:

    Du musst die ID-Spalte noch als Primär-Schlüssel definieren!!!
    Was für eine Datenbank verwendest Du? MS SQL Express?



  • @Jochen

    Wo in der xsd wird bei Dir die ID als Primary deklariert ? Ich sehe es nicht :o(

    Bei marcap steht noch ergeänzend:

    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
          <xs:selector xpath=".//mstns:inventar_data" />
          <xs:field xpath="mstns:ID" />
        </xs:unique>
    


  • Knuddlbaer schrieb:

    Wo in der xsd wird bei Dir die ID als Primary deklariert ? Ich sehe es nicht :o(

    Ganz unten:

    <xs:unique name="Constraint1" msdata:PrimaryKey="true"> 
          <xs:selector xpath=".//mstns:Test1" /> 
          <xs:field xpath="mstns:ID" /> 
        </xs:unique>
    


  • Ich verwende eine .mdf vom MS SQL Server 2005 Pro 😉



  • Ah ok,

    jetzt springt mir die ID im Block entgegen. Das steht in der xsd von marcap auch drinne.



  • marcap schrieb:

    Ich verwende eine .mdf vom MS SQL Server 2005 Pro 😉

    Dann definier doch bitte die Spalte "ID" als "Primary Key" und dann erzeuge das DataSet nochmals...



  • Knuddlbaer schrieb:

    Das steht in der xsd von marcap auch drinne.

    Was steht da drin!? Ich kann nix finden von "Constraint" und "Primary"...



  • Unfairerweise hab ich das komplette Projekt hier liegen. Die Tabelle schaut folgt aus:

    <xs:element name="inventarDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="inventarDataSet" msprop:Generator_DataSetName="inventarDataSet">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="inventar_data" msprop:Generator_UserTableName="inventar_data" msprop:Generator_RowDeletedName="inventar_dataRowDeleted" msprop:Generator_RowChangedName="inventar_dataRowChanged" msprop:Generator_RowClassName="inventar_dataRow" msprop:Generator_RowChangingName="inventar_dataRowChanging" msprop:Generator_RowEvArgName="inventar_dataRowChangeEvent" msprop:Generator_RowEvHandlerName="inventar_dataRowChangeEventHandler" msprop:Generator_TableClassName="inventar_dataDataTable" msprop:Generator_TableVarName="tableinventar_data" msprop:Generator_RowDeletingName="inventar_dataRowDeleting" msprop:Generator_TablePropName="inventar_data">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="ID" msdata:AutoIncrement="true" msprop:Generator_UserColumnName="ID" msprop:Generator_ColumnPropNameInRow="ID" msprop:Generator_ColumnVarNameInTable="columnID" msprop:Generator_ColumnPropNameInTable="IDColumn" type="xs:int" />
                  <xs:element name="gelöscht" msprop:Generator_UserColumnName="gelöscht" msprop:Generator_ColumnPropNameInRow="gelöscht" msprop:Generator_ColumnVarNameInTable="columngelöscht" msprop:Generator_ColumnPropNameInTable="gelöschtColumn" type="xs:boolean" minOccurs="0" />
                  <xs:element name="titel" msprop:Generator_UserColumnName="titel" msprop:Generator_ColumnPropNameInRow="titel" msprop:Generator_ColumnVarNameInTable="columntitel" msprop:Generator_ColumnPropNameInTable="titelColumn" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="30" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="kategorie" msprop:Generator_UserColumnName="kategorie" msprop:Generator_ColumnPropNameInRow="kategorie" msprop:Generator_ColumnVarNameInTable="columnkategorie" msprop:Generator_ColumnPropNameInTable="kategorieColumn" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="20" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="verliehen" msprop:Generator_UserColumnName="verliehen" msprop:Generator_ColumnPropNameInRow="verliehen" msprop:Generator_ColumnVarNameInTable="columnverliehen" msprop:Generator_ColumnPropNameInTable="verliehenColumn" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="20" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="ordner" msprop:Generator_UserColumnName="ordner" msprop:Generator_ColumnPropNameInRow="ordner" msprop:Generator_ColumnVarNameInTable="columnordner" msprop:Generator_ColumnPropNameInTable="ordnerColumn" type="xs:int" minOccurs="0" />
                  <xs:element name="seite" msprop:Generator_UserColumnName="seite" msprop:Generator_ColumnPropNameInRow="seite" msprop:Generator_ColumnVarNameInTable="columnseite" msprop:Generator_ColumnPropNameInTable="seiteColumn" type="xs:int" minOccurs="0" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
        <xs:unique name="Constraint1" msdata:PrimaryKey="true">
          <xs:selector xpath=".//mstns:inventar_data" />
          <xs:field xpath="mstns:ID" />
        </xs:unique>
      </xs:element>
    


  • Dann sollte es auch korrekt funktionieren und die ID-Spalte sollte nicht vorhanden sein. Also einfach den "Insert-Befehl" löschen und neu anlegen lassen...



  • Das Problem war die fehlende Einstellung für das AutoIncrement im SQLServer

    http://www.rothmichael.de/cpp/Tabelle.png

    Marcap hat im DataSet nachträglich das AutoIncrement umgeschaltet, der Wizzard musste also davon ausgehen, das die ID manuell erzeugt wird.


Anmelden zum Antworten