Autoinrement bei ADO.NET


  • Mod

    Sicher dass die Spalte ein Autoincrement hat. Normalerweise verweigert Sie dann auch Updates und Vorgaben!

    Gib gar keinen Wert an beim Insert!



  • Jochen Kalmbach schrieb:

    Das ist C++/CLI...

    Und deshalb landet das jetzt auch zwei Etagen tiefer.



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wenn ich gar keinen Wert angebe kommt:

    title_detail.h(783) : error C2660: 'CDInventar::inventarDataSetTableAdapters::inventar_dataTableAdapter::Insert': Funktion akzeptiert keine 6 Argumente

    Wenn ich nur ein leeres komma angebe kommt ein/mehrere Syntaxfehler!



  • Es ist unklar was inventarDataSetTableAdapters ist.



  • Das ist der dataTableAdapter zum zugehörigen dataSet . Diese beiden liegen auf der Form1 , während marcaps Code in einer anderen Form untergebracht ist. dataTableAdapterInstance ist ein Handle auf den dataTableAdapter von Form1 , und wie dieser erzeugt wird, ist, denke ich mal, klar.



  • Ob Du wohl so nett wärst und die Deklaration vom inventarDataSetTableAdapters zeigen würdest, so das man mal weiß von welchem Typ dieser ist ...

    Ich hab im ganzen Projekt nichts was auf dataTableAdapter hört und finde auch keinen Typ dataTableAdapter



  • Eigentlich sollt beim Insert die ID-Spalte automatisch wegfallen...
    Dann hast Du entweder in Deiner DB was falsch definiert und er konnte die "ID"-Spalte nicht automatisch als Primär-Key identifizieren oder Du musst das Insert-Statement von Hand anpassen...

    Was für eine Version von VS? 2003 oder 2005? (ich vermute 2005, oder?)



  • ja ich benutze 2005.

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



  • "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"...


Anmelden zum Antworten