Wie zugrundeliegende Connection wechseln oder besser auf Datenquellen verzichten?

04/09/2007 - 20:27 von Andy Dorwald | Report spam
Der Betreff sollte eigentlich "Wie den zugrundeliegenden Connectionstring
wechseln oder sogar auf das erstellen von Datenquellen IM DESIGNER komplett
verzichten?" lauten. Nur wàre dies etwas zu lang als Betreff gewesen.

Bisher habe ich auf das erstellen von Datasets als Datenquelle im Designer
verzichtet. Auch habe ich sehr viel ausschließlich über den sqlDataReader
erledigt (gefüllt und Zeile für Zeile dessen Inhalt an z. B. ein Grid
übergeben - mühselig musste ich zuvor dem Grid die Columns manuell
anlegen/definieren usw...).
Hierzu hatte ich mehrere Gründe. Zum einen "dachte ich", dass alles, was man
irgendwie mit dem sqlDataReader erledigen kann (weil so schön schlank), ich
auch damit erledigen sollte, um Performance zu gewinnen. Sollte
zwischendurch ein INSERT oder UPDATE notwendig sein, hatte ich dieses per
SQL (z. B. INSERT-Command) erledigt.

Jedoch immer, wenn ich im Internet oder einem Buch etwas über ADO.NET
gelesen hatte, wurde mir zum einen - für reines lesen und anzeigen - immer
wieder ein Dataset schmackhaft gemacht und zum anderen dies auch noch gleich
schön optisch per Click-Click-Drag-Drop im Designer erledigt.

Da stellt sich mir nun die Grundsatzfrage, WER macht hier etwas falsch bzw.
nicht Praxiskonform?

1. Sollte ich Grids doch lieber per Dataset füllen (weil so bequem und ohne
"selbstgeschriebenen" Code) oder weiterhin per For...Next über ein
sqlDataReader befüllen?

2. Sollte ich Datasets ausschließlich im Code erzeugen? Falls ja, warum dann
der ganze Hype zu dem soooo hübschen Designer (und "easy to use" ist er ja
wirklich!)

3. Wenn ich über den Designer arbeite, mit welchen Performance- oder
sonstigen Problemen muss ich rechnen?

4. Wenn ich nicht über den Designer wechsle, wie kann man dann irgendwie
automatisiert in einem Grid die Columns festlegen, ohne sie mühselig per
Hand zu definieren?

5. Wichtigste Frage: WIE kann ich die "Basis"-Connection zu den im Designer
erstellten Datasets zur Laufzeit (bei Programmstart) wechseln?
Damit meine ich das ich beim programmieren mit einer TestDB auf dem
SQL-Server arbeite. Zu Laufzeit soll jedoch NICHT die "TestDB", sondern die
"ProduktivDB" verwendet werden.
Ich finde aber nirgends eine Property, der ich bei Programmstart einfach
mal den Connectionstring bestimmen könnte.
Manuell hatte ich das bisher so erledigt, dass ich global eine
SqlConnection bei Programmstart definierte und je nach Wunsch die eine oder
andere DB zugewiesen hatte.
Ein solches übergeordnetes Objekt finde ich aber bei den im Designer
erzeugten Datasets nicht - oder ich habe hier einfach nur einen Denkfehler!?

Ich hoffe man kann mir etwas aus meiner Steinzeitprogrammierung raushelfen!

VG
Andy
 

Lesen sie die antworten

#1 Peter Fleischer
04/09/2007 - 21:21 | Warnen spam
Andy Dorwald wrote:

1. Sollte ich Grids doch lieber per Dataset füllen (weil so bequem
und ohne "selbstgeschriebenen" Code) oder weiterhin per For...Next
über ein sqlDataReader befüllen?



Hi Andy,
was du solltest, wird dir niemand vorschrieben:-) Aus meiner Erfahrung ist
das Füllen eines Grids in einer Schleife mit dem DataReader sinnloser
Projektierungs-Aufwand, der nur in wirklich begründeten Fàllen angewandt
werden sollte.

2. Sollte ich Datasets ausschließlich im Code erzeugen? Falls ja,
warum dann der ganze Hype zu dem soooo hübschen Designer (und "easy
to use" ist er ja wirklich!)



Der Designer erzeugt auch nur Code. Wenn du àhnliche Funktionalitàt ohne
Designer selbst programmierst, ist der Aufwand ein Vielfaches, der nur in
wirklich begründeten Fàllen angewandt werden sollte.

3. Wenn ich über den Designer arbeite, mit welchen Performance- oder
sonstigen Problemen muss ich rechnen?



Gewaltig weniger Aufwand beim Codieren und geringere
Fehlerwahrscheinlichkeit. Bei der Ausführung àhnlicher Funktionalitàt, die
ohne Nutzung des Designers codiert wurde, gibt es keine
Performance-Unterschiede, wenn qualifiziert kodiert wurde.

4. Wenn ich nicht über den Designer wechsle, wie kann man dann
irgendwie automatisiert in einem Grid die Columns festlegen, ohne sie
mühselig per Hand zu definieren?



Ich kann mir keinen dritten Weg vorstellen, der weder den Code mit dem
Designer erstellte, noch den Code selbst manuell erstellt. Wie stellst du
dir das vor?

5. Wichtigste Frage: WIE kann ich die "Basis"-Connection zu den im
Designer erstellten Datasets zur Laufzeit (bei Programmstart)
wechseln?



Schreib einfach vor dem Fill deinen eigenen ConnectionString in die
entsprechende Eigenschaft.

Damit meine ich das ich beim programmieren mit einer
TestDB auf dem SQL-Server arbeite. Zu Laufzeit soll jedoch NICHT die
"TestDB", sondern die "ProduktivDB" verwendet werden.



Nutze den ConnectionString aus den Settings. Zur Laufzeit nutzt du einfach
eine andere Config-Datei. bzw. andere Eintràge.

Ich finde aber nirgends eine Property, der ich bei Programmstart
einfach mal den Connectionstring bestimmen könnte.



Da gibt es zwei Möglichkeiten.

1. Partielle Klasse mit eigener Eigenschaft, die den ConnectionString von
außen nach innen in die entsprechende Eigenschaft schreibt.

2. Zugriff von außen auf die ConnectionString-Eigenschaft des
Connection-Objektes.

Manuell hatte ich das bisher so erledigt, dass ich global eine
SqlConnection bei Programmstart definierte und je nach Wunsch die
eine oder andere DB zugewiesen hatte.
Ein solches übergeordnetes Objekt finde ich aber bei den im Designer
erzeugten Datasets nicht



Schau dir doch einfach mal den Code an.

- oder ich habe hier einfach nur einen
Denkfehler!?
Ich hoffe man kann mir etwas aus meiner Steinzeitprogrammierung
raushelfen!



Using d As New OpenFileDialog
With d
.ShowDialog()
Me.Tab1TableAdapter.Connection.ConnectionString = _
"provider=microsoft.jet.oledb.4.0;data source=" & .FileName
Me.Test2KDataSet.Tab1.Clear()
Me.Tab1TableAdapter.Fill(Me.Test2KDataSet.Tab1)
End With
End Using

oder

Namespace testDataSetTableAdapters
Partial Class Tab1TableAdapter

Public WriteOnly Property OtherConnection() As SQLConnection
Set(ByVal value As SQLConnection)
Me._connection = value
End Set
End Property

End Class
End Namespace

Im Programm

Dim ds as New WindowsControlLibrary1.testDataSet
Dim ta as New
WindowsControlLibrary1.testDataSetTableAdapters.Tab1TableAdapter

ta.OtherConnection = New SQLConnection()


Viele Grüße

Peter

Ähnliche fragen