![]() |
Datenbank: Oracle • Version: 8i • Zugriff über: dbExpress
TDataSet -> System.Data.DataSet Bridge?
Hallo, hat einer eine Möglichkeit gefunden Daten aus einem TDataSet in ein .NET DataSet zu schieben oder diese zu verbinden. Das würde die Umstellung auf .NET (im Besonderen auf ASP.NET) sehr erleichtern, da nur die DataSet's gewechselt werden müssten, die mit einer sichtbaren ASP.NET Komponente verbunden sind und die als Source ein System.Data.DataSet erwarten. Hat da Borland gepennt und diese Verbindung vergessen? Ich habe noch nichts gefunden, selbst Dr. Bob meinte, man müsse alles überarbeiten! Aber nicht bei meiner Projektgrösse! Kann nicht monatelang darüber abtauchen! dbExpress gibt es ja schliesslich weiter als dbExpress.NET! Wer will schon freiwillig diesen ADO-Kram benutzen?
|
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
TDataset arbeitet im verbundenen Zustand, ADO.NET ohne aktive DB-Verbindung. Und ADO.NET ist bei richtiger Verwendung um Welten mächtiger als das was Borland schon seit Jahren mit TDataset bietet. Und wenn Du schon auf ASP.NET wechselt, so überarbeite deine DB-Schnittstelle auch gleich mit. Oder schreib dir ein Transformer-Klasse die sowas macht (evtl. 'ne Idee für ein OpenSource/Sourceforge-Projekt). |
Re: TDataSet -> System.Data.DataSet Bridge?
Ist es nicht möglich einen Dekorator über ein System.Data.DataSet zu stülpen, der von einem "TDataSet" ableitet und somit die "Übersetzung" übernimmt?
Wäre es nicht außerdem möglich einfach in den Vorgängern deiner Klassen (welche TDatasets konsumieren) den Typen und das handling zu ändern? Und wenn du schon dabei bist: Muss es überhaupt ein .Net DataSet sein? (bei dem Ding vergates mir irgendwie immer.... :? ) |
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
|
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
Zitat:
ADO.NET <> ADO das muss man auch erst verstehen. Es hat sich dabei einiges verändert. Zumal .NET bzw. gerade ADO.NET nicht auf Client-Server-Szenarien, wie tomaten in seinem Projekt vorgeht, ausgerichtet ist. In .Net 2.0 kommt noch ne "Binärkomprimierung" hinzu. Das mit dem Dekorator ist ne gute Idee. Allerdings würde ich beim Umstieg auf das Verbindungslose Web (was ASP.NET definitv ist) wirklich drüber nachdenken vom alten Client-Server-Prinzip zum N-Tier-Prinzip überzuwechseln. Wird dir in der Zukunft mehr Erfolg bringen. Achso. Ganz vegessen. Vielleicht bringt dir der Link was: Zitat:
![]() |
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
|
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
Zitat:
Disconnected heißt primär nicht das du nach jeder Abfrage die DB-Verbindung beendest (wird auch nicht bei ASP.NET gemacht. Da wird sie in den Connection-Pool gelegt), sondern das das Ergebnis deiner Abfrage keine DB-Verbindung mehr benötigt und z.B einfach auf einen anderen Rechner übertragen werden kann (N-Tier-Anwendungen) oder gespeichert werden kann. Zitat:
@Generalissimo: Du hast mich fälschlicherweise zitiert. |
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
|
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
Es programmiert sich auch ekelhaft dagegen. ;) Ich persönlich setze lieber auf normale Klassen, die mit Hilfe von Metadaten und einem kleinen (selbst geschriebenen :) ) Enhancer in der Lage sind, selbstständig mit der DB zu "reden". DataSets wären doch IMHO viel zu umständlich und dieses DataAdapter-Gefriemel wäre mir auch zu ... friemelig. :mrgreen: Zitat:
Zitat:
Was du da als Vorteil von 2.0 ansiehst, benutze ich schon lange um meine Deltas zwischen den Tiers zu übertragen. ;) Was mich jetzt wirklich interessieren würde, wäre mehr, ob man Thomas' "DB Aware"-Klassen nicht anhand weniger Basisklassen, ganz unten in seinem Code, überzeugen könnte mit .Net Containern zu reden? |
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
|
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
@Robert_G Endlich mal einer dem das Handling von ADO.NET genauso spanisch vorkommt, wie mir. Wenn man vernüftig mit SQL umgehen kann, liebt man doch den einfach TSQLQuery. Und wenn ich im Web Daten sichbar machen muss, hau ich die in eine kbmMemTable die ich auch temporär auf die Platte legen kann und wenn die Seite erneut aufgerufen wird (evtl. durch Umsortierung im Grid) sehr schnell wieder geladen werden kann. Nur auch die kbmMemTable.NET ist von TDataSet abgeleitet und muss irgendwie an die ASP.NET Komponenten gebunden werden, womit wir wieder am Anfang wären ... :( |
Re: TDataSet -> System.Data.DataSet Bridge?
Huhu! :wiejetzt:
Keiner mehr da. Ich stell die Frage mal anders, da mir System.Data.DataSet recht neu sind. Kennt einer eine einfache Methode die Rekords aus einem TDataSet in ein System.Data.DataSet-Tabelle zu schieben? Das würde ja schon reichen. Nimmt zwar ein bisschen den Speed aber auch nicht wirklich merklich. |
Re: TDataSet -> System.Data.DataSet Bridge?
Probiere doch erstmal ICOmponent, und IEnumerable in deinen TDataSets zu implementieren.
Ersteres gibt dir Designtime support und letzteres ist die simopelste Form von List DataBinding. Wenn das funktioniert würde ich dir eine Implementierung von IBindingList empfehlen, damit hat der BindingContext und BindingManager sämtliche Infos, die er brauchen kann. ;) (IEnumerable füllt dir nur ein Listen control, ohne dir die Möglichkeit zu geben, wie es das macht. |
Re: TDataSet -> System.Data.DataSet Bridge?
So, nachdem ich ein handhabbares (keine Ahnung wie das nach neuer deutscher Rechtschreibung richtig ist ...) DataSet habe (mit First, Last, Next, Prior, Bof, Eof, FieldByName, RecNo, RecordCount ... usw.) habe ich nur noch ein Problem. Wie erkenne ich, ob ein Feld "null" ist. Das gute .IsNull existiert ja natürlich bei Microsoft auch nicht. Und (DataSet.Table.Row.Item == null) funktioniert auch nicht! :(
Weiss es zufällig jemand? |
Re: TDataSet -> System.Data.DataSet Bridge?
Dann steht entweder null oder DbNull.Value drin ;)
|
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
Eine andere Frage. Warum bekomme ich dabei immer einen Oracle Fehler (ORA-00936: Ausdruck fehlt)?:
Delphi-Quellcode:
OleDbCommand Command1 = new OleDbCommand;
Command1.CommandText = "SELECT * FROM MyTable WHERE MyID <> @MyID"; Command1.Parameters.Add("@MyID", OleDbType.Integer).Value = 0; OleDbDataReader DataReader = Command1.ExecuteReader(); |
Re: TDataSet -> System.Data.DataSet Bridge?
"@" ist dieses augenkrebsverursachende Ding, weshalb ich TSQL nicht leiden kann.
Oracle hält es da standardmäßig bei einem Retinafreundlichen ":". ;) Falls du den OleDbProvider nimmst um unabhängig von der DB zu sein musst du dir also überlegen, wie du die Parameterpräfixe anpasst. ;) Wobei konsequentes Verwenden der ADO.Net interfaces und eine Factory für die richtige Connection auch nicht dumm wären. ;) Hast du einmal eine Connection in der Hand, hast du alle nötigen Factories für Commands, Parameter und DataReader zur Hand:
Code:
IDbConnection connection = DeineFactory.GetInstance(connectionString);
IDbCommand command = connection.CreateCommand(); IDataParameter parameter = command.CreateParameter(); command.Parameters.Add(parameter); IDataReader dataReader= command.ExecuteReader(); Zitat:
Aber wenn man bedenkt wie straightforward und logisch die APIs in .Net aufgebaut sind, weiß man entweder genau wo man suchen muss, oder es ergibt sich von selbst. ;) |
Re: TDataSet -> System.Data.DataSet Bridge?
Hm, wenn man von dbExpress kommt, kommt man nichtmal auf die Idee, dass das "@" DB-abhängig ist. Bei dbExpress ist es ja immer ":" und die Parameter werden automatisch erzeugt. Es ist also noch ein langer Weg ... vom Luxus zu ADO.NET! ;)
|
Re: TDataSet -> System.Data.DataSet Bridge?
Mist, sobald ich eine Doppelpunkt vor die Variable setze crasht die Anwendung und will gleich alles an Microsoft melden :D ! Nochmal die IDE sagt dazu was! :(
|
Re: TDataSet -> System.Data.DataSet Bridge?
Ich glaube hier wird's langsam Zeit für einen neuen Thread. Und wenn dann schreibe auch was zickt. Zum Beispiel dass du einen ORA-XXX bekommst oder was auch immer...
|
Re: TDataSet -> System.Data.DataSet Bridge?
Zitat:
|
Re: TDataSet -> System.Data.DataSet Bridge?
Hier mal der "Crashcode":
Delphi-Quellcode:
Passiert gleichmässig völlig indentisch in Delphi 2005 und #Develop. Mit "?" anstelle von ":THEID" im SQL geht es, aber so kann man ja nicht arbeiten.
OleDbConnection Connection = new OleDbConnection();
Connection.ConnectionString = "Provider=\"MSDAORA.1\";User ID=JOU;Data Source=DB;Persist Security Info=True;Password=gibts"; Connection.Open(); OleDbCommand Command = Connection.CreateCommand(); Command.CommandText = "SELECT * FROM \"TABLE\"\n"; Command.CommandText += "WHERE \"THEID\"<>:THEID"; Command.Parameters.Add(":THEID", OleDbType.Integer).Value = 0; OleDbDataReader DataReader = Command.ExecuteReader(); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz