Laden...

DataColumn AutoIncrement temporär entfernen

Erstellt von kat_2403 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.404 Views
K
kat_2403 Themenstarter:in
236 Beiträge seit 2007
vor 16 Jahren
DataColumn AutoIncrement temporär entfernen

verwendetes Datenbanksystem: MSSLQ Server 2005 Express

Hallo zusammen,

ich bin jetz grad wieder mit meinem Latein am Ende, und vielleicht hat jemand einen Tipp. Die Suchergebnisse hier zu AUTOINCREMENT treffen auch nicht wirklich das, was ich lösen muss.

Ich hole mir Daten via SP aus der Datenbank, schreibe diese in ein DataTable.
Super, dass alle Columns der DataRow schon die Eigenschaften der SQL-Tabelle übernehmen.
Wenn ich nun eine Tabelle habe tbKunde, das Feld ID (Autoinrement), dann kann ich in der Anwendung nicht schreiben:


DataTable dt = this.ExecuteStoredProcedure(connectionString, "sp_" + context + operationType.ToString(), dRow);

            foreach (DataColumn dc in dt.Columns)
            {
                                
                if (dRow[dc.ColumnName] != dt.Rows[0][dc.ColumnName])
                {
                    dRow[dc.ColumnName] = dt.Rows[0][dc.ColumnName];
                }
                
            }

... weil ja die ReadOnly - Eigenschaft auf TRUE gesetzt ist, auch die AutoIncrement-Eigenschaft der Column auf TRUE steht.

Jetzt hab ich gedacht, setz ich das einfach mal zurück, weil ich muss ja an den Wert ran:


dc.ReadOnly = false;
dc.AutoIncrement = false;

Das übernimmt er auch für die DataColumn, hat aber trotzdem nix gebracht.
Kommt immer noch die Fehlermeldung:
ReadOnlyException: Spalte ID ist schreibgeschützt.

Wie löst man das am besten.
Danke.
Katja

476 Beiträge seit 2004
vor 16 Jahren

hallo kat_2403,

ich nehme an des handelt sich dabei um dRow... und nicht um dc..., schau mal ob die Spalte in dRow nicht schreibgeschützt ist, denn dieser willst du mittels deines Codes einen Wert zuweisen.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

K
95 Beiträge seit 2007
vor 16 Jahren

Noch ne Spalte ans Datatable ranhängen und dort das reinschreiben was du brauchst, wenn alles geändert hast, kannste die erste ja löschen.

K
kat_2403 Themenstarter:in
236 Beiträge seit 2007
vor 16 Jahren

Hi Yellow,
ich nehme an, dass es eh nicht erlaubt ist, einer Spalte einen Wert zuzuweisen, wenn diese Spalte als autoincrement definiert ist. Ich möchte diese Logik der ID-Vergabe schon auf dem Server belassen.
Was ich nicht verstehe: wenn ich eben vor der Wertzuweisung AutoIncrement=false stelle, und auch ReadOnly false zuweise, warum er das dann trotzdem nicht blickt.
Ich habs vorerst so gelöst, dass ich nur dann eine Wertzuweisung vornehme, wenn es kein AutoIncrement ist. Find ich weder schön noch sauber, aber konnt mir jetzt nicht anders helfen.
Unklar ist mir auch, dass er beim erstmaligen Befüllen der DataRow nichts anmeckert, wenn ich dann aber ein Update ausführe er dann meint, die Spalte sei schreibgeschützt.
Außer READONLY find ich nix, was mit Schreibschutz an der Column zu tun haben könnte.
MfG
Katja