Autor Beitrag
Nio
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 06.03.09 12:03 
Hallo erstmal,

ich habe ein DataSet, in dem ich von einer MySQL Datenbank, oder auch einer Access Datenbank ganze Tabellen direkt über einen SQL Befehl in dieses DataSet speichere.

Aber wenn ich nun bestimmte Informationen in dem DataSet, bzw. in einer einzelnen Tabelle in dem DataSet ändern möchte, würde ich gerne SQL Querys "direkt" auf das DataSet anweden.

Beispiel:

MySQL Tabelle mit 2 Spalten, ID und Name....
nun lade ich diese Tabelle in ein DataSet und möchte jetzt in dem DataSet selber Einträge hinzufügen / löschen / bearbeiten. Die Tabelle in der MySQL Datenbank soll in dem Moment "nicht" verändert werden, sondern "nur" das DataSet, allerding mit "SQL Befehlen".

Heißt ich wende auf das DataSet einen SQL Befehl ein "INSERT INTO nametable( Name ) VALUES( "TestName" )" und in der Tabelle "nametable" von dem DataSet wird dieser Eintrag hinzugefügt.

Meine Frage: Gibt es eine Komponente oder eine Möglichkeit, das so zu machen?

Viele Grüße,
nio
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 06.03.09 12:11 
Hallo,

Du verwendest an dieser Stelle DataSet/DataTable, dann geht nur das, was diese Klassen (und die darin enthaltenen Klassen wie Rows und Columns) anbieten. Das DataSet ist aber keine SQL-Datenbank im Arbeitsspeicher; deshalb gehen SQL-Befehle in keinem Fall.

Standardverfahren zum Umgang mit DataSet/DataTable findest Du z.B. im OpenBook VC# Kap.28.

Eine Alternative mit SQL-ähnlichen Verfahren dürfte LINQ sein; aber dazu habe ich keine Ahnung. Benutze dazu doch einmal die Suche hier oder per Google.

Gruß Jürgen
Skiller-1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 100

Win XP | Debian | Ubuntu
C# | PHP | VB.NET
BeitragVerfasst: Fr 06.03.09 15:21 
Naja wie bereits schon von JüTho erwähnt SQL - Befehle gehen nicht allerdings gibt es doch genügent Mittel die das DataSet mitbringt um das gleiche Ergebnis zu erziehlen.

Übrigens ein Select auf eine DataTable kannst du machen :
ausblenden C#-Quelltext
1:
DataRow[] myDataRows = myDataSet.Tables["Tabelle"].Select("Bedingung")					


Und Relationen zwischen den einzelnen Tabellen kann man auch erstellen.
Aber wie schon von JüTho drauf hingewiesen kann ich ebenfalls nur das Openbook von Galileo Computing empfehlen.

_________________
~ Wer Rechtschreibfehler findet darf sie behalten ~
Nio Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 09.03.09 10:26 
Klar, nicht, dass ich das nicht schon wüsste...
das Problem, warum ich das brauche ist eher folgendes:

Ich habe eine Applikation, mit der ich aus Datenbanken Tabellen ziehe und in ein DataSet lade, um diese Daten dann anhand an automatisierten Skripten zu prüfen und evtl. zu bereinigen. Was ich mache, ist dann, statt einen Adapter auf das DataSet anzuwenden, für Bereinigungen die SQL Befehle zu erstellen, die dann die Informationen in der Datenbank selber direkt aufbereiten ( Den Adapter verwende ich deshalb nicht, da dieser unter MySQL Datenbanken nicht wirklich funktioniert ).
Nun habe ich schon einige dieser automatisierten Skripten, um aber die "Kontrolle" wie auch die Performance zu verbessern, wollte ich auch die Änderungen direkt im DataSet mit übernehmen. Da ich aber nur die SQL Befehle habe, wäre es das einfachste, einfach diesen SQL befehl auf das DataSet anzuwenden, statt in jedem Skript Änderungen zu machen...

... aber da das wohl nicht so wirklich geht, muss ich es eben so machen ( nur, um es mal zu erläutern, was die Problemstellung ist )

Danke trotzdem :)

Viele Grüße,
nio
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 09.03.09 10:48 
Ja, es gibt keine Möglichkeit, SQL auf das DataSet anzuwenden. Das Einzige, was es gibt, ist LINQ to DataSet, ist aber etwas unschön zu schreiben und im Endeffekt auch nicht wirklich SQL. Du müsstest Deine Statements also so oder so umschreiben.

Aber warum funktioniert der Table-Adapter nicht mit MySQL? Im Endeffekt wird doch nur schlichtes SQL angewendet?
Nio Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 11.03.09 12:50 
vor einer etwas längeren Zeit habe ich mal beim Testen von der OdbcCommandBuilder Klasse festgestellt, dass zu MySQL Datenbanken der UpdateCommand nicht richtig zurück gegeben werden kann ( oder war es der InsertCommand oder doch DeleteComman? ).
Ich weiß es nicht mehr so genau, jedenfalls ist dieser CommandBuilder ja dazu gedacht, dass die Änderungen, die im DataSet vorgenommen werden, direkt in die Datenbank geschrieben werden ( wisst ihr denke ich ja selber ).
Es ist jedenfalls so, dass in einer der 3 Methoden ( OdbcCommandBuilder.GetInsertCommand(), OdbcCommandBuilder.GetUpdateCommand() oder OdbcCommandBuilder.GetDeleteCommand() ) eine InvalidOperationException ( speziell bei MySQL Datenbanken, nicht aber bei Access Datenbanken ) geschmissen wurde, deswegen hab ich mich kurzerhand dazu entschlossen, die SQLs selber zusammen zu bauen.

Ich hab es jetzt so gelöst, dass ich die Änderungen, die ich durch ein Prüfungsskript ausführen möchte, zunächst den alten Stand in ein Array und dagegen den neuen Stand in ein Array speichere, welche ich dann vergleiche, um die Änderungen zu erfassen.
Das muss ich natürlich jetzt noch bei einer ganzen Reihe von Prüfungsskripten bearbeiten, bzw. erweitern.

Viele Grüße,
nio
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 11.03.09 13:51 
Es ist auch Blödsinn (Entschuldigung, so muss man es wirklich bezeichnen), Odbc oder OleDb zu verwenden, wenn es etwas Besseres gibt. Unter connectionstrings werden mehrere MySql-Provider vorgeschalten; zu empfehlen sind der MySql-Connector und dotConnect von Devart. Damit sind vermutlich alle Probleme nicht mehr relevant, die es mit Odbc oder OleDb gäbe.

Dann funktionieren auch alle MySqlDataAdapter usw. wie gewünscht.

Also dringende Empfehlung: Benutze die richtigen Hilfsmittel, und Du machst Dir das Leben angenehm leicht.

Jürgen
Nio Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 11.03.09 16:21 
Klar, es gibt immer irgendwelche einfachen Wege, aber wenn man nichts von den Wegen weiß, wird man wohl eher die nehmen, die man kennt, oder nicht? :)
Das mit dem MySql-Connector und dotConnect werde ich mir mal merken und dann entsprechend, wenn ich die zeit dazu habe, mal ausprobieren, dankeschön.

Viele Grüße,
nio
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 11.03.09 17:14 
Wenn man (irgendwelche) Probleme mit MySql hat, könnte man auch die Suche (im Forum oder per Google) benutzen und wird mit Sicherheit auf die speziellen DbProvider stoßen. Jürgen
Nio Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 12.03.09 14:24 
Klar, das mag ja alles sein. Aber mittlerweile ist dieser Lösungsweg ein Jahr alt.
Dementsprechend, da zu diesem Zeitpunkt eine dringende Umsetzung der Lösung erforderlich war und hingegen die Erfahrung vor einem Jahr auch noch nicht dem Level von heute entsprach, hat man sich damals nicht so Gedanken darum gemacht, bessere Lösungswege zu suchen, wenn der Weg, der sich einem anbot, auch gut funktionierte und auch heute noch gut funktioniert.
Ich meine, wenn man für jeden Weg beim Programmieren eines Tools erstmal zu jeder Einzelheit bei google oder in unterschiedlichen Foren Informationen sammelt, ob es denn nun gut oder schlecht ist, wenn man die und die Klasse verwendet um das Problem zu lösen, dann wird man vorraussichtlich nie fertig.
Davon abgesehen habe ich mich zu der Problemstellung, die ich bezüglich SQL Befehle auf DataSet ausführen hatte, schon vorher öfters bei Google gesucht ;)

Ich bedanke mich trotzdem herzlich für den Tipp, schließlich lernt man nie aus :)

Viele Grüße,
nio