Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Datenquelle erstellen
waldemar - Di 10.03.09 10:47
Titel: Datenquelle erstellen
Hallo zusammen,
ich bin noch ein ziemlicher Neuling was CSharp angeht, also bitte entschuldigt die wahrscheinlich triviale Frage.
Ich habe folgendes Problem, ich soll eine eigene Datenquelle erstellen, die SQL-Befehle entgegennimmt, und diese intern in ein proprietäres Format umbaut, und ausführt.
Dazu dachte ich mir ich könnte einfach die Klassen SqlDataSource und SqlDataSourceView ableiten und zum Beispiel die Methode SqlDataSourceView.ExecuteSelect
überschreiben. Allerdings verlangt der Konstruktor von SqlDataSource eine Referenz auf den aktuellen HttpContext, welcher in meiner nativen Anwendung natürlich nicht vorhanden ist.
Hat jemand einen Lösungsansatz für mich?
Grüße
Waldemar
JüTho - Di 10.03.09 11:37
Hallo Waldemar und :welcome:
Du glaubst, das ist eine triviale Frage? Selbst das glaube ich nicht, aber die Antwort ist noch viel komplexer.
In welchem Zusammenhang willst Du die Daten verarbeiten? Deine Stichworte SqlDataSource und HttpContext weisen auf eine
ASP.NET-Anwendung (WebForms) hin, die Formulierung "native Anwendung" dagegen auf
WinForms oder vielleicht
WPF. Bitte kläre dies.
Als Einführung in die DB-Verarbeitung unter NET kann ich vor allem auf
OpenBook Visual C# [
http://openbook.galileocomputing.de/visual_csharp/] Kap.25 ff. verweisen. Eine (sehr knappe und unvollständige) Einführung ist auch unter
Datenbanken How-To [
http://www.seven-c.de/files/Datenbankenhowto.htm] zu finden.
Was ist mit "eigener Datenquelle" gemeint, die "SQL-Befehle entgegennimmt"? Eine
SQL-Datenbank? Dann musst Du Dich damit befassen; und die o.g. Einführungen sollten helfen. Aber die Datenbank kann normalerweise nicht mit den normalen Klassen von NET aus erstellt werden; das geht über eine Benutzeroberfläche des betreffenden DBMS. (OK, es geht über DbCommands "Create Database" und "Create Table", aber nur über umständliche manuelle Befehle.) Oder eine
Datenmenge nur im Arbeitsspeicher? Das sind DataSet/DataTable, aber die verstehen kein SQL. Allenfalls über
LINQ ist etwas SQL-Ähnliches eingeführt worden.
Was soll "in ein proprietäres Format" bedeuten? Wenn es das externe Speichern in einem speziellen Format bedeutet, musst Du es manuell mit den File.Write-Methoden oder FileStream/StreamWriter u.a. erledigen. Wie die "interne" Vorarbeit am besten aussieht, kann man nur raten, wenn man das gewünschte Format besser kennt. Vorzugsweise ist auf StringBuilder.AppendFormat hinzuweisen (passende Überladung aussuchen!); aber es kommen auch viele andere Methoden und Klassen in Frage.
Auch
CodeProject [
http://www.codeproject.com] ist immer eine gute Adresse, wenn spezielle Verfahren oder Controls benötigt werden.
Ich hoffe, ich habe Dich nicht nur verwirrt, sondern auch einige Wege aus einer Sackgasse aufzeigen können. Jürgen
waldemar - Di 10.03.09 12:30
Hallo Jürgen,
vielen dank für die schnelle Antwort. :D
| Zitat: |
| In welchem Zusammenhang willst Du die Daten verarbeiten? Deine Stichworte SqlDataSource und HttpContext weisen auf eine ASP.NET-Anwendung (WebForms) hin, die Formulierung "native Anwendung" dagegen auf WinForms oder vielleicht WPF. Bitte kläre dies. |
Also momentan ist es nur eine ASP.NET-Anwendung, allerdings wird später auch noch eine WinForms-Anwendung erstellt, d. h. die Datenquelle muss beides unterstützen.
Das klingt interessant werde ich mir mal genauer durchlesen
| Zitat: |
Was ist mit "eigener Datenquelle" gemeint, die "SQL-Befehle entgegennimmt"? Eine SQL-Datenbank? Dann musst Du Dich damit befassen; und die o.g. Einführungen sollten helfen. Aber die Datenbank kann normalerweise nicht mit den normalen Klassen von NET aus erstellt werden; das geht über eine Benutzeroberfläche des betreffenden DBMS. (OK, es geht über DbCommands "Create Database" und "Create Table", aber nur über umständliche manuelle Befehle.) Oder eine Datenmenge nur im Arbeitsspeicher? Das sind DataSet/DataTable, aber die verstehen kein SQL. Allenfalls über LINQ ist etwas SQL-Ähnliches eingeführt worden.
Was soll "in ein proprietäres Format" bedeuten? Wenn es das externe Speichern in einem speziellen Format bedeutet, musst Du es manuell mit den File.Write-Methoden oder FileStream/StreamWriter u.a. erledigen. Wie die "interne" Vorarbeit am besten aussieht, kann man nur raten, wenn man das gewünschte Format besser kennt. Vorzugsweise ist auf StringBuilder.AppendFormat hinzuweisen (passende Überladung aussuchen!); aber es kommen auch viele andere Methoden und Klassen in Frage. |
Also das ist nicht so einfach zu erklären.
Man muss dazu das gesamte Szenario kennen. Die momentane Umgebung sieht folgendermaßen aus.
Es gibt eine SQL-Datenbank (Firebird), welche nicht direkt angesprochen werden kann, sondern nur über einen JavaServer, und einen WindowsClient geschrieben in Delphi, der mit dem Server kommuniziert.
Nun soll für diese Datenbank eine WebAnwendung erstellt werden, und außerdem wurde beschlossen in Zukunft jegliche Software in CSharp zu programmieren.
Darum wird temporär eine weitere Zwischenschicht eingeführt, die in der Zukunft den bestehenden Server ersetzt, aber momentan den bestehenden Server kontaktiert um Zugriff auf die Daten zu bekommen.
Um sich das Szenario besser vorstellen zu können hab sollte die angehängte Grafik helfen.
Grüße
Waldemar
waldemar - Mo 16.03.09 09:22
Hat denn keiner eine Lösung?
Grüße
Waldemar
Kha - Mo 16.03.09 17:22
Es gibt also den alten DB-Server mit einer proprietären Schnittstelle
und irgendwann einen neuen mit SQL?
Um mit beiden über SQL kommunizieren zu könne, bräuchtest du natürlich einen full-blown SQL-Parser - nicht gerade trivial. Ein IRepository Pattern bietet sich da viel eher an: Du hast beispielsweise ein ICustomerRepository-Interface mit einer Methode Customer[] GetAllCustomers();. Für beide Server hast du dann jeweils eine Implementation davon, die die Query im richtigen Format abschicken.
Wie stark ähnelt das andere Format denn SQL?
waldemar - Di 17.03.09 09:41
Hi Kha,
danke für deine Antwort.
Kha hat folgendes geschrieben : |
Es gibt also den alten DB-Server mit einer proprietären Schnittstelle
und irgendwann einen neuen mit SQL?
|
Das ist richtig.
Kha hat folgendes geschrieben : |
Um mit beiden über SQL kommunizieren zu könne, bräuchtest du natürlich einen full-blown SQL-Parser - nicht gerade trivial. Ein IRepository Pattern bietet sich da viel eher an: Du hast beispielsweise ein ICustomerRepository-Interface mit einer Methode Customer[] GetAllCustomers();. Für beide Server hast du dann jeweils eine Implementation davon, die die Query im richtigen Format abschicken.
|
Dabei habe ich aber das Problem das ich nicht weiß welche Methoden das Interface benötigt, da es ja beispielsweise direkt von einer Instanz von
DataGridView benutzt werden soll.
Kha hat folgendes geschrieben : |
Wie stark ähnelt das andere Format denn SQL? |
Sehr wenig, mal davon abgesehen, in beiden Formaten Tabellen, Spalten und Werte vorkommen.
Grüße
Waldemar
Kha - Di 17.03.09 14:58
waldemar hat folgendes geschrieben : |
Kha hat folgendes geschrieben : |
Um mit beiden über SQL kommunizieren zu könne, bräuchtest du natürlich einen full-blown SQL-Parser - nicht gerade trivial. Ein IRepository Pattern bietet sich da viel eher an: Du hast beispielsweise ein ICustomerRepository-Interface mit einer Methode Customer[] GetAllCustomers();. Für beide Server hast du dann jeweils eine Implementation davon, die die Query im richtigen Format abschicken.
|
Dabei habe ich aber das Problem das ich nicht weiß welche Methoden das Interface benötigt, da es ja beispielsweise direkt von einer Instanz von DataGridView benutzt werden soll. |
Ich kenne das Pattern eher aus dem Web-Bereich, aber es sollte auch mit Winforms funktionieren. Etwas dynamischere Methoden wären aber natürlich auch möglich:
C#-Quelltext
1: 2: 3:
| DataTable Get(string tableName); void Update(DataTable table); ... |
Also eine Variation von IDbDataAdapter. Und die Anbindung an den neuen Server würde dann eben auch den entsprechenden DataAdapter benutzen.
waldemar - Di 17.03.09 16:35
Vielen dank.
Ich werde mich damit mal beschäftigen und dann berichten wenn es mir gelungen ist.
Grüße
Waldemar
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!