Adapter.Fill soll nur die Werte liefern, die im BindingSoruce.Filt

23/04/2010 - 12:27 von Johann | Report spam
Hallo

ich möchte folgendes erreichen:
Adapter.Fill soll nur die Werte liefern, die im BindingSoruce.Filter gesetzt
sind.

Beispiel:
Ich lade eine große Tabelle mit folgendem Code

Dim selCmd As String = "SELECT * FROM ArtikelTab"
Dim ConStr As String = "Provider=SQLOLEDB;…….

Dim Adapter As OleDbDataAdapter = New OleDbDataAdapter(selCmd, ConStr)

Dim MyTab As DataTable = New DataTable()

Dim MyTabBindingSource As BindingSource = New BindingSource()
MyTabBindingSource.DataSource = MyTab

1. Adapter.Fill(MyTab)
MyTabBindingSource.Filter = "ARTNR = '03151'"

DatGrid.DataSource = MyTabBindingSource

Bei dieser Source Reihenfolge wie oben, làdt der Adapter die ganze Tabelle
und erst dann filtert um im Grid den einzigen Artikel anzuzeigen.(dauert sehr
Lange)
Natürlich könnte ich selectieren mit WHERE : SELECT * FROM
ArtikelTab WHERE ARTNR=’03151’
Ich möchte aber die Selection explizit über BindingSource.Filter erreichen

Ich würde gerne die Reihenfolge àndern:

2. MyTabBindingSource.Filter = "ARTNR = '03151'"
Adapter.Fill(MyTab)
um den Adapter zu zwingen nur den gefilterten Wert zu liefern.

Im Fall 2 wird die Exception ausgeworfen: Die Spalte [ARTNR] wurde nicht
gefunden.
Muss man hier mit Adapter.FillSchema arbeiten? Wie?


Fragen:
Kann das so funktionieren?
Kann ich Adapter.Fill (myTab) dazu Zwingen nur gefilterte Werte zu liefern?
Wie müsste ich den Adapter.FillSchema einsetzen?


Danke
Johann
 

Lesen sie die antworten

#1 Elmar Boye
23/04/2010 - 16:46 | Warnen spam
Hallo Johann,

"Johann" schrieb ...
ich möchte folgendes erreichen:
Adapter.Fill soll nur die Werte liefern, die im BindingSoruce.Filter gesetzt
sind.



tut es nicht. Die beiden haben nichts miteinander zu tun.
Eine BindingSource filtert immer nur auf die bereits geladene DataTable.
Um einen Adapter anzuweisen mußt Du eine parameterisierte Abfrage erstellen-
Also so wie im andern Thead schon angefangen.

Beispiel:
Ich lade eine große Tabelle mit folgendem Code

Dim selCmd As String = "SELECT * FROM ArtikelTab"
Dim ConStr As String = "Provider=SQLOLEDB;…….



Bitte verwende den SqlClient anstatt OleDb, wenn Du einen SQL Server
als Backend verwendest.

2. MyTabBindingSource.Filter = "ARTNR = '03151'"
Adapter.Fill(MyTab)
um den Adapter zu zwingen nur den gefilterten Wert zu liefern.



Da làsst sich niermand zwingen.
Du mußt da schon die Arbeitsweise von DataSet <-> DataAdapter übernehmen.

Kann ich Adapter.Fill (myTab) dazu Zwingen nur gefilterte Werte zu liefern?



Verwende typisierte DataSets + TableAdapter (wie auch im anderen Thread).
http://msdn.microsoft.com/de-de/library/7zt3ycf2(VS.90).aspx

Und lerne sie abseits des Designer Geklickes richtig kennen.
Für jemand der nur wenig mit SQL am Hute hat - wie ich bei Dir vermute -
ist das der sinnvollste und einfachste Weg zum Einstieg.

Gruß Elmar

Ähnliche fragen