Laden...

datatset zu dataset

Erstellt von Loewchen0507 vor 16 Jahren Letzter Beitrag vor 15 Jahren 9.532 Views
Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren
datatset zu dataset

hi leute,

eine kurze frage...

ich habe eine csv datei eingelesen in ein dataset nämlich so:


            DataTable dt = new DataTable();
            DataSet ds = new DataSet();
            DataRow dr;

            using (StreamReader sr = new StreamReader("c:\\temp\test.csv", System.Text.Encoding.Default))
            {
                string einlesen = sr.ReadLine();
                string[] Array = einlesen.Split(';');

                //MessageBox.Show(Array.Length.ToString());
                for (int i = 0; i < Array.Length; i++)
                {
                    dt.Columns.Add();
                }

                foreach (string Element in Array)
                {
                    Element.Trim();
                }
                DataRow DataRow = dt.NewRow();

                while (sr.Peek() > -1) ///Elemente einlesen
                {
                    //MessageBox.Show(dt.Columns.Count.ToString());
                    einlesen = sr.ReadLine();
                    Array = einlesen.Split(';');
                    dt.Rows.Add(Array);
                }

            }
            ds.Tables.Add(dt);

des weiteren habe ich ein weiteres dataset dass sich auf einen sql server bezieht... wie kann ich nun dem sqlDataset daten aus dem anderen dataset hinzufügen bzw. daten in dem sqldataset mit daten aus dem anderen dataset verändern???

Gruß Loewchen

1.985 Beiträge seit 2004
vor 16 Jahren

Hallo Loewchen0507,

ich glaube das musst Du manuell machen. Ein DataSet.Merge() bringt Dich ja nicht weiter, da Du nicht einfach sämtliche Daten von beiden DataSets in einem haben willst.

Also musst Du wahrscheinlich das Ziel-DataSet durchgehen, Dir die entsprechenden Daten aus dem anderen rausholen und aktualisieren.

Du kannst mit .Select() beispielsweise ein Select ausführen.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

Hi Fabian,

und was ist wenn das erst Dataset dem zweiten identisch ist???

also spalten anzahl gleich
spalte 1 von ds1 entspricht auch spalte 1 von ds2 usw... geht dann ein merge???

habe mir eigentlich eher soetwas gedacht wie:


            OdbcCommandBuilder cb = new OdbcCommandBuilder(daSQL);
            connSQL.Open();
            daSQL.Update(ds, "[Addresses]");
            connSQL.Close();

Gruß Loewchen

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

ich habe das gefühl ich habe mich hier ein bisschen verfranst... habe die ganze zeitmit datasets und dataadapter rum gespielt... habe aber das gefühl ich bräuchte eher einen komplett anderen lösungs ansatz...

also mal anders wie würdet ihr da ran gehen wenn ihr eine csv datei bekommt in der daten drin stehen die in eine sqltabelle geschrieben werden sollen??? aber das ganze als update... nicht als insert...

ich dreh hier gleich durch... habe fünf tage an der falschen stelle geproggt...

D
496 Beiträge seit 2005
vor 16 Jahren

dataset mit daten aus csv füllen, connection und cmd vom adapter auf den von der sql quelle ändern und dann adapter. update()

ich hatte das problem mal um daten von einer db2 nach mysql zu bekommen
das kannst du genauso machen, wichtig ist nur das die spaltennamen in den beiden tabellen bzw die spaltennamen in deiner sqt tabelle so heissen wie die columns im dataset.

siehe
Dataset Inhalte in Tabelle in Datenbank schreiben

ach ja diese stelle ist sehr wichtig
myodbcDataAdapter.AcceptChangesDuringFill = false;

damit haben alle rows im dataset den status added und werden somit beim
update command auch mit erfasst.

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

Hi,

ich habe weitere Informationen gesammelt und noch einiges umgesetzt und habe jetzt nur noch an einer Stelle ein Problem...

Ich habe zwei DataSets die identisch aufgebaut sind und benutzte dann dataset.merge(dataset2) um die Änderungen die in dem einen dataset stehen in das andere zu übernehmen... das hat aber nicht geklappt... so dachte ich also habe ich eine schleife geschrieben in der ich die daten per hand aus dem einen in das andere dataset schreibe und dabei mache ich einen vergleich und siehe da... da sagt er mir, dass die daten in beiden datasets übereinstimme... gucke ich aber in die datenbank ... so zeigt er mir noch die alten daten an... was mache ich falsch??? ich dachte dataadapter.update(dataset) schreibt die daten zur datenbank zurück???

hier der code:


        static public DataSet CreateCommandAndUpdateSQL(DataSet csvDatei, string connectionString, string queryString)
        {
            DataSet dataSet = new DataSet();

            using (OdbcConnection connection = new OdbcConnection(connectionString))
            {
                connection.Open();
                OdbcDataAdapter dataAdapter = new OdbcDataAdapter();
                dataAdapter.SelectCommand = new OdbcCommand(queryString, connection);
                OdbcCommandBuilder commandBuilder = new OdbcCommandBuilder(dataAdapter);

                dataSet.AcceptChanges();
                //Test mit Merge
                dataSet.Merge(csvDatei);
                dataSet.AcceptChanges();

                dataAdapter.Fill(dataSet);

                using (DataTableReader reader = dataSet.CreateDataReader())
                {
                    while (reader.Read())
                    {
                        DataTableReader readerForChange = csvDatei.CreateDataReader();
                        while (readerForChange.Read())
                        {
                            if (reader[0].ToString() == readerForChange[0].ToString())
                            {
                                MessageBox.Show(readerForChange[0] + " - " + reader[0] + " ");
                                for (int x = 0; x < readerForChange.FieldCount; x++)
                                {
MessageBox.Show(readerForChange[x] + " - " + reader[x] + " ");
                                }
                            }
                        }
                    }
                }

                dataAdapter.Update(dataSet);
            }
            return dataSet;
        }

danke für eure hilfe... 🙂

LG Loewchen

J
3.331 Beiträge seit 2006
vor 16 Jahren

Original von Loewchen0507
was mache ich falsch??? ich dachte dataadapter.update(dataset) schreibt die daten zur datenbank zurück???

dataSet.AcceptChanges();  

Hallo Loewchen,

ich bin mir nicht sicher, weil Du mehrfach **Fill **und **Merge **verwendest und dazwischen 2x AcceptChanges() einbaust. Diese Methode ist "riskant": Sie sorgt verwirrenderweise dafür, dass alle Änderungen innerhalb des Datasets als akzeptiert angesehen werden. Danach gibt es keine internen Vermerke mehr, dass Daten noch als hinzugefügt/geändert/gelöscht zur Aktualisierung zur Verfügung stehen!

Vielleicht musst Du nochmal überlegen, ob sie wirklich passt.

Außerdem könntest Du kontrollieren, ob der CommandBuilder die Befehle richtig erstellt hat. (Das kann er z.B. nur dann, wenn es einen PrimaryKey gibt.)

Viel Erfolg! Jürgen

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

hi jürgen,

ja... verstehe...
also liegt es daran dass er keinen primary key hat...

muss ich beiden datasets einen primary key geben???
oder nur dem command builder???
wo genau muss ich da suchen???

benutze wohl die falschen suchbegriffe in der msdn...

lg loewchen

D
496 Beiträge seit 2005
vor 16 Jahren

ich glaub ich hab deine frage beim ersten mal nicht verstanden, ich dachte du wolltest ein update der csv daten in eine sql db machen. aber gut.

wenn die zwei identisch aufgebaute datasets zusammenführen möchtest kannst du doch auch in einer schleife

die rows von ds1 an ds2 anhängen.

fantasie code:

for each (row myRow in ds1 rows)
{
ds2.rows.add(myRow);
}

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

hi demondriver,

ich denke du hast schon richtig verstanden... ich bin hier ewig am hin und her switchen... ich möchte beide datasets zusammenführen und das eine dataset dann an den sqlserver zurückschreiben... sicherlich kann ich das auch mit schleifen machen... aber als ich dann gesehen habe, dass es da auch die merge funktion gibt habe ich gedacht... warum selber schreiben wenn's da schon was gibt... gedacht habe ich mir das halt so... die datasets füllen... dann mergen und dann updaten (tolles denglisch 😉 ) und das merge hat ja auch gewirkt... nur das update machte er nicht richtig...

wobei momentan wirkt auch das merge nicht mehr richtig... hmm... also es macht nichts... was ich aber auch verstehen kann... wenn er keinen key hat über den er das machen kann...

aber ich habe es noch nicht geschafft... ihm zu sagen... passmal auf die erste spalte beider datasets ist dein key...

keine ahnung komme hier nicht weiter...

lg loewchen

D
496 Beiträge seit 2005
vor 16 Jahren

hast du denn überhaupt einen primary key in der ziel tabelle und wenn ja ist das ein autoinkrement?

soweit ich weiß sollte man diesen key dann nicht angeben da die datenbank das erledigt.

davon abgesehen, wie ich vorher schon beschrieben habe müssen die rows die upgedated (um beim denglisch zu bleiben) den status changed oder added haben.
Das erreichst du indem du die eigenschaft des adapters !vor! dem füllen auf accept changesduringfill = false setzt desweiteren solltest du das acceptchanges() weglassen den daducht wird der row status wieder geändert und der command builder wird kein update für diese rows durchführen.

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

hm... ok... verstehe...

in der tabelle ist es aber immer so, dass die id automatisch hochgezählt wird... es ist aber auch das feld über das die eindeutige zuordnung der datensätze erfolgt...

wie kann ich denn im nachhinein sagen... hier nimm mal spalte 1 als primarykey...

bzw. wie kann ich das sonst lösen???

mein code sieht zur zeit so aus:


        static public DataSet CreateCommandAndUpdateSQL(DataSet csvDatei, string connectionString, string queryString)
        {
            DataSet dataSet = new DataSet();

            using (OdbcConnection connection = new OdbcConnection(connectionString))
            {
                connection.Open();
                OdbcDataAdapter dataAdapter = new OdbcDataAdapter();
                dataAdapter.SelectCommand = new OdbcCommand(queryString, connection);
                OdbcCommandBuilder commandBuilder = new OdbcCommandBuilder(dataAdapter);

                //Test mit Merge
                dataAdapter.AcceptChangesDuringFill = false;
                dataAdapter.Fill(dataSet);
                dataSet.Merge(csvDatei);

                using (DataTableReader reader = dataSet.CreateDataReader())
                {
                    while (reader.Read())
                    {
                        DataTableReader readerForChange = csvDatei.CreateDataReader();
                        while (readerForChange.Read())
                        {
                            if (reader[0].ToString() == readerForChange[0].ToString())
                            {
                                MessageBox.Show(readerForChange[0] + " - " + reader[0] + " ");
                                for (int x = 0; x < readerForChange.FieldCount; x++)
                                {
                                    MessageBox.Show(readerForChange[x] + " - " + reader[x] + " ");
                                }
                            }
                        }
                    }
                }
                dataAdapter.Update(dataSet);
            }
            return dataSet;
        }

und er Merged immer noch nicht... wohl wegen der fehlenden primarykeys... oder???
aber wie bekomme ich diese nachträglich hinein??? geht das nur über ein datatable??? oder kann ich das auch per dataset machen???

lg Loewchen

D
496 Beiträge seit 2005
vor 16 Jahren

kannst du mal bitte einen screenshot von deinem dataset visualizer posten.
ich glaube wir reden aneinander vorbei.
wenn du in der zieltabelle in der sql db eine tabelle hast mit einer spalte id vom typ autoincrementer wird die db beim einfügen neuer datensätze diese spalte per autoinc. füllen. d.h du brauchtst (bzw solltest) diese spalte nicht abfragen, nicht ins dataset schreiben und auch nicht updaten.
Desweitern hast du per row ids im dataset bzw datatable sowieso primary keys die du nicht sieht die VS aber automatisch vergibt.

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

J
3.331 Beiträge seit 2006
vor 16 Jahren

Hallo Loewchen,

tut mir leid, dass ich keine klaren Lösungen mehr vorschlagen kann; ich würde anders vorgehen als Du. Aber ein paar Hinweise kann ich Dir geben:

Ein **DataSet **enthält immer mindestens eine DataTable. Über :rtfm: DataTable.PrimaryKey kannst Du auch zur Laufzeit eine Spalte als Schlüssel festlegen.

Das Problem, dass im DataSet andere (neue) IDs verwendet werden als später in der DB, wurde im Forum (soweit ich mich erinnere) schon mehrfach besprochen. Mal suchen...

Jürgen

Nachtrag: "PrimaryKey automatisch im Visual Studio"? Nun ja, wenn das DataSet visuell erzeugt wird und immer mit typisiertem DataSet gearbeitet wird... Aber wenn die Datenmenge nachträglich aus einer CSV-Datei kommt, muss wahrscheinlich manuell nachgearbeitet werden.

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

also an sich läuft es jetzt... egal ob ich die id spalte mit rein nehme oder nicht... nur das die datensätze nicht verändert werden sondern grundsätzlich neue hinzugefügt werden...

also primarykey... ich habe auch schon versucht nachträglich einen primary key zu vergeben... aber irgendwie bin ich da wohl zu dämlich für...

@jürgen
wenn du einen anderen ansatz hast gerne... so langsam läuft mir nämlich die zeit davon... ich muss nämlich morgen um neuen etwas abgeben... daher bin ich für alles offen...

lg loewchen

J
3.331 Beiträge seit 2006
vor 16 Jahren

Hallo Loewchen,

nochmal zum Verständnis Deines Vorgehens:1.Du holst eine gewisse Datenmenge aus der Datenbank; dazu gibt es einen PrimaryKey. 1.Du holst entsprechende Daten (identische Datenstruktur) aus der csv-Datei. 1.Datensätze, die sich gemäß csv-Datei geändert haben, sollen in der DB gespeichert werden.

Gibt es ein Feld, das in der csv-Datei als PrimaryKey verwendet werden kann (nämlich dasselbe wie in der DB)?

Können die PrimaryKey-Werte genutzt werden zum Vergleich der Datensätze in DB und CSV?

Wenn ich das falsch verstanden habe, dann beschreibe doch bitte einmal ähnlich knapp, was Du erreichen willst. Es muss doch möglich sein, schnell zu einem guten Ergebnis zu kommen. Jürgen

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

Hallo Jürgen,

ja der Meinung bin ich ja eigentlich auch...

Also noch einmal grundlegend:
Ich habe eine CSV Datei die ich auslesen
Die CSV Datei hat 6 "Spalten" ... in der ersten Spalte steht die id, die auch gleichzeitig der primarykey in der db ist...

Die db ist genauso aufgebaut... bzw... mit einem select statement fülle ich das dataset so, dass ich ebenfalls 6 spalten habe in der selben reihenfolge...

erste spalte ist die ID
zweite vom typ nvarchar
dritte vom typ ntext
vierte vom typ float (in csv steht 3,2)
fünfte vom typ datetime (in csv datei steht dd.mm.yyyy)
sechste vom typ bit (in csv datei steht 1 oder nichts)

ansonsten hast du alles richtig verstanden...

LG Loewchen

J
3.331 Beiträge seit 2006
vor 16 Jahren

OK, der nächste Schritt...

Also passt DataTable.Merge() (nicht Dataset!). Bitte prüfe die Beschreibung in der SDK-Doku; ich verstehe es so, dass die RowState-Eigenschaften sowohl bei Quelle (csv) als auch beim Ziel (DB-Tabelle) zusammenpassen müssen. Beim Ziel hattest Du natürlich nichts geändert, also können wir das vergessen. Bei der Quelle musst Du möglicherweise (vor dem Merge) alle RowStates auf **Modified **setzen.

Meine Vermutung ist, dass bei Deinen bisherigen Versuchen der RowState nicht richtig gesetzt oder interpretiert wurde.

Danach kann der UpdateCommand erstellt werden (das könnte, weil Du ja durch die DB-Tabelle einen PrimaryKey hast, auch der CommandBuilder erledigen). Danach kann DbDataAdapter.Update ausgeführt werden.

Gruß Jürgen

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

hm... also mein code sieht jetzt so aus:


        static public DataSet CreateCommandAndUpdateSQL(DataSet csvDatei, string connectionString, string queryString)
        {
            DataSet dataSet = new DataSet();

            using (OdbcConnection connection = new OdbcConnection(connectionString))
            {
                connection.Open();
                DataRow dr;
                DataTable dt = new DataTable();
                OdbcDataAdapter dataAdapter = new OdbcDataAdapter();
                dataAdapter.SelectCommand = new OdbcCommand(queryString, connection);
                OdbcCommandBuilder commandBuilder = new OdbcCommandBuilder(dataAdapter);

                DataColumn Spalte1 = new DataColumn("Spalte1", Type.GetType("System.Int32"));
                DataColumn Spalte2 = new DataColumn("Spalte2", Type.GetType("System.String"));
                DataColumn Spalte3 = new DataColumn("Spalte3", Type.GetType("System.String"));
                DataColumn Spalte4 = new DataColumn("Spalte4", Type.GetType("System.Decimal"));
                DataColumn Spalte5 = new DataColumn("Spalte5", Type.GetType("System.DateTime"));
                DataColumn Spalte6 = new DataColumn("Spalte6", Type.GetType("System.Boolean"));

                DataColumn[] keyColumn = new DataColumn[1];

                dt.Columns.Add(Spalte1);
                dt.Columns.Add(Spalte2);
                dt.Columns.Add(Spalte3);
                dt.Columns.Add(Spalte4);
                dt.Columns.Add(Spalte5);
                dt.Columns.Add(Spalte6);

                dt.PrimaryKey = new DataColumn[] { Spalte1 };
                //dt.RowChanged += new System.Data.DataRowChangeEventHandler(row

                dataSet.Tables.Add(dt);
                dataAdapter.AcceptChangesDuringFill = false;
                dataAdapter.Fill(dataSet);
                dataSet.AcceptChanges();
                dataSet.Merge(csvDatei);

und er gibt mir beim merge jetzt die fehlermeldung:
Einschränkungen konnten nicht aktiviert werden. Mindestens eine Zeile enthält Werte die die Einschränkungen non-null, unique or foreign-key verletzen.

hm... ich vermute mal das ist die id spalte...

Gruß Loewchen

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

hm.. also ich habe schon mal einbisschen weiter gemacht und habe jetzt folgendes stehen:


        private static void Row_Changed(object sender,
            DataRowChangeEventArgs e)
        {
            Console.WriteLine("Row changed {0}\t{1}",
                e.Action, e.Row.ItemArray[0]);
        }

        static public DataSet CreateCommandAndUpdateSQL(DataSet csvDatei, string connectionString, string queryString)
        {
            DataSet dataSet = new DataSet();

            using (OdbcConnection connection = new OdbcConnection(connectionString))
            {
                connection.Open();
                DataRow dr;
                DataTable dt = new DataTable();
                OdbcDataAdapter dataAdapter = new OdbcDataAdapter();
                dataAdapter.SelectCommand = new OdbcCommand(queryString, connection);
                dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                OdbcCommandBuilder commandBuilder = new OdbcCommandBuilder(dataAdapter);

                DataColumn Spalte1 = new DataColumn("Spalte1", Type.GetType("System.Int32"));
                DataColumn Spalte2 = new DataColumn("Spalte2", Type.GetType("System.String"));
                DataColumn Spalte3 = new DataColumn("Spalte3", Type.GetType("System.String"));
                DataColumn Spalte4 = new DataColumn("Spalte4", Type.GetType("System.Decimal"));
                DataColumn Spalte5 = new DataColumn("Spalte5", Type.GetType("System.DateTime"));
                DataColumn Spalte6 = new DataColumn("Spalte6", Type.GetType("System.Boolean"));

                DataColumn[] keyColumn = new DataColumn[1];

                dt.Columns.Add(Spalte1);
                dt.Columns.Add(Spalte2);
                dt.Columns.Add(Spalte3);
                dt.Columns.Add(Spalte4);
                dt.Columns.Add(Spalte5);
                dt.Columns.Add(Spalte6);

                dt.PrimaryKey = new DataColumn[] { Spalte1 };
                dt.RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed);
                
                DataTable dt2 =dt.Clone();
                dataSet.Tables.Add(dt);
                csvDatei.Tables.Add(dt2);

                dt.Merge(dt2);
                
                dataAdapter.Update(dataSet);
            }
            return dataSet;
        }

jetzt sagt er mir bei dataAdapter.update(dataSet):
Aktualisieren: TableMapping['Table'] oder DataTable 'Table' kann nicht gefunden werden.

Loewchen

J
3.331 Beiträge seit 2006
vor 16 Jahren

Was soll denn das mit den Spalten. Durch DataTable.Clone() bekommst Du doch eine Kopie davon...

Setze doch DataTable.TableName fest; dann gibt es die letzte Fehlermeldung vermutlich nicht mehr.

Das zweite DataSet kann gestrichen werden; dt.Merge(dt2) genügt.

Schau Dir einmal die anderen Varianten von Merge an; vielleicht passt eine andere besser (das bezieht sich auf die vorige Fehlermeldung mit den Einschräniungen).

Hast Du per Debugger den **RowState **von zusammengehörenden Zeilen geprüft: dt vor Merge, dt2, dt nach Merge? Hast Du den **UpdateCommand **nach dem CommandBuilder geprüft?

Jürgen

Übrigens: Um welche Datenmengen handelt es sich eigentlich? Wenn nur (im Verhältnis) einige wenige Datensätze geändert werden, könntest Du die Daten vom DataReader aus direkt per DbCommend.ExecuteNonQuery() für "Update ..." an die DB weiterleiten.

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

Hiho,

ihr lieben... ich habe es tatsächlich hinbekommen... ich kann FAST alles machen.. sonst würde ich hier auch ncht schreiben... 😉

also noch mal folgendes... ich habe eine CSV datei... diese lese ich ein in ein dataset... dann lese ich in ein weiteres dataset die werte aus der tabelle (mit einem select statement) dann suche ich in diesem zweiten dataset (sqldataset) die daten die verändert werden sollen... und verändere sie mit den entsprechenden daten aus der csv datei... alles wunderbar...

ABER:
Problem... ich bekomme die Fehlermeldung:
Dynamische SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand unterstützt, der keine Schlüsselspalteninformationen zurückgibt.

das select statement sieht so aus:
Select [TEXT182], [TEXT183], [LASTNAME0], [FIRSTNAME0], [TEXT116], [TEXT117], [TEXT118], [TEXT119], [TEXT120], [text9], [text10], [text11], [TEXT124], [text135], [STREET0], [TEXT2], [TEXT3], [ZIP0], [CITY0], [text34], [text36], [text39], [TEXT42], [TEXT44], [text45], [text46], [DATE3], [DATE5], [DATE7], [text50], [text51], [text52], [text53], [text54], [text55], [text56], [text57], [text58], [text59], [text60], [TEXT61], [text119], [text63], [text64], [text65], [text66], [TEXT67], [TEXT68], [TEXT69], [TEXT67], [TEXT68], [TEXT69], [TEXT70], [TEXT71], [TEXT72], [TEXT73], [TEXT75], [TEXT76], [TEXT77], [TEXT78], [TEXT81], [TEXT82], [TEXT83], [TEXT84], [TEXT85], [TEXT86], [TEXT87], [TEXT88], [TEXT89], [TEXT90], [TEXT91], [TEXT92], [TEXT98] FROM [addresses];

der primary key dieser tabelle ist [ID] die spalte ist in dem oberen select statement nicht zu finden...

was mache ich falsch???

LG Loewchen

J
3.331 Beiträge seit 2006
vor 16 Jahren

Hast Du Dir den SelectCommand vollständig automatisch erstellen lassen, oder hast Du Einfluss darauf genommen?

Füg' doch ID zum SELECT hinzu.

Gruß Jürgen

C
5 Beiträge seit 2008
vor 15 Jahren

Noch ein Nachtrag:
D A N K E @ demondriver235 bzgl. Wichtigkeit von DataAdapter.AcceptChangesDuringFill.!!!
Hat sehr geholfen 🙂