DataTable in einer SQL-Abfrage?

20/03/2008 - 13:31 von Christoph Michalski | Report spam
Hallo,
ich habe folgendes Problem: in einer Fremd-Datenbank, die in meinem Programm
benötige, sind diverse Daten einen und denselben Fall betreffend
bedauerlicherweise in einer Tabelle in unterschiedlichen Datensàtzen
gespeichert. Das bedeutet, dass ich nicht alle benötigten Daten mit einem
SQL-Statement abfragen kann. Bis jetzt gehe ich so vor, dass ich zunàchst die
wichtigsten Daten abfrage, sie in eine DataTabe speichere und muß dann für
jeden einzelnen Datensatzt der DataTable eine weitere SQL-Abfrage durchführen
um andere Daten zu bekommen.
Das dauert natürlich sehr lange, so das ich jetzt nach einer besseren Lösung
suche. Weiß vielleicht jemand einen Rat?
Ich habe folgendnen Konstrukt probiert, aber ich weiß nicht wie ich die
DataTabel in eine SQL-Abfrage integrieren soll:
1. die 1. Abfrage:
Dim command As OleDbCommand
Dim reader As OleDbDataReader Dim command as
Dim DataTab As DataTable()

SQLString = _
"SELECT Tab1.Feld1 As Test_ID " & _
"FROM Tab1 " & _
"WHERE Tab1.Feld2 > 0 "
command = New OleDbCommand(SQLString, Conn)
reader = command.ExecuteReader
DataTab DT.Load(reader)

2. nun sollen für die gefundenen Datensàtze (Tab1.Feld1 )
weitere Daten abgefrat werden:
SQLString = _
"SELECT Tab1.Feld3 " & _
"FROM Tab1 , DataTab " & _
"WHERE Tab1.Feld4 =Test_ID "
command = New OleDbCommand(SQLString, Conn)
reader = command.ExecuteReader
Die DataTable wird hier natürlich als eine Datenbanktabelle nicht erkannt.
Wàre für jeden Tipp sehr dankbar!
Gruß

Christoph
 

Lesen sie die antworten

#1 Elmar Boye
20/03/2008 - 18:56 | Warnen spam
Hallo Christoph,

Christoph Michalski schrieb:
ich habe folgendes Problem: in einer Fremd-Datenbank, die in meinem Programm
benötige, sind diverse Daten einen und denselben Fall betreffend
bedauerlicherweise in einer Tabelle in unterschiedlichen Datensàtzen
gespeichert. Das bedeutet, dass ich nicht alle benötigten Daten mit einem
SQL-Statement abfragen kann. Bis jetzt gehe ich so vor, dass ich zunàchst die
wichtigsten Daten abfrage, sie in eine DataTabe speichere und muß dann für
jeden einzelnen Datensatzt der DataTable eine weitere SQL-Abfrage durchführen
um andere Daten zu bekommen.
Das dauert natürlich sehr lange, so das ich jetzt nach einer besseren Lösung
suche. Weiß vielleicht jemand einen Rat?
Ich habe folgendnen Konstrukt probiert, aber ich weiß nicht wie ich die
DataTabel in eine SQL-Abfrage integrieren soll:
1. die 1. Abfrage:
Dim command As OleDbCommand
Dim reader As OleDbDataReader Dim command as
Dim DataTab As DataTable()

SQLString = _
"SELECT Tab1.Feld1 As Test_ID " & _
"FROM Tab1 " & _
"WHERE Tab1.Feld2 > 0 "
command = New OleDbCommand(SQLString, Conn)
reader = command.ExecuteReader
DataTab DT.Load(reader)

2. nun sollen für die gefundenen Datensàtze (Tab1.Feld1 )
weitere Daten abgefrat werden:
SQLString = _
"SELECT Tab1.Feld3 " & _
"FROM Tab1 , DataTab " & _
"WHERE Tab1.Feld4 =Test_ID "



àndere hier das = in eine IN (...) Bedingung
"WHERE Tab1.Feld4 IN ("



und hànge die Werte direkt an, so aus dem Stegreif:
for each row as DataRow in dt
SqlString += row(0).ToString()
next
SqlString += ")"

Je nach Datentyp müssen da ggf. Anführungszeichen usw. drumherum.
Alternativ kannst Du auch OleDbParameter-Objekte erzeugen und die
entsprechende Anzahl "?" einfügen.

command = New OleDbCommand(SQLString, Conn)
reader = command.ExecuteReader



Je nach Provider ist kann die Anzahl der Parameter für die IN Klausel
begrenzt sein, so dass Du evtl. mehrere Anweisungen abschicken musst.
Wenn Du das Ergebnis ebenfalls in eine DataTable übertràgst kannst
Du sie mit wiederholtem Fill blockweise füllen.

Gruß Elmar

Ähnliche fragen