verknüpfte Daten aus externen DB übertragen

25/04/2010 - 22:00 von Uwe Conradi | Report spam
Hallo zusammen,
ich möchte in ms sql server db die Daten aus zwei verknüpften Tabellen
importieren. Die Prozedur funktioniert, wenn es in der verknüpften Tabelle
weniger Daten gibt, wenn es aber mehr Daten gibt, dann bekomme ich die
Meldung:

Irgendwas mache ich da falsch. Hier ist mein Code:

Dim IdLetztenSatzes%
Dim n%
Dim n2%
'ziel festlegen, Tebelle in die die verknüpfte daten geschrieben
werden.
Dim SQLBer As String = " select lfd_nr,last_name,first_name from
Berichte "
dtVerknDat = GetDataTable(OpenConnection, SQLBer)

Try
'ich habe die Quelltabelle in DataGrid geladen, so schien es mir leichter
das ganze zu kapieren
bs.MoveFirst()
For n = 1 To bs.Count
'zuerst durch Stammdatentabelle laufen und personensàtze übertragen
Dim drBer As DataRow = dtBer.NewRow()

drBer("last_name") = PersonenDataGridView.Item(0,
PersonenDataGridView.CurrentRow.Index).Value.ToString
drBer("first_name") = PersonenDataGridView.Item(1,
dtBer.Rows.Add(drBer)

Dim adapter As SqlDataAdapter = New SqlDataAdapter(SQL,
OpenConnection)
Dim builder As SqlCommandBuilder = New
SqlCommandBuilder(adapter)
adapter.Update(dtBer)

'sich den letzten id merken
Dim SQLz As String = "SELECT max(patientid) from patients"
Dim dtLetzte As DataTable = GetDataTable(OpenConnection,
SQLz)
IdLetztenSatzes = dtLetzte.Rows(0).Item(0).ToString()


'quelle (Daten aus der .mdb TAbelle
Dim ds2 As New DataSet
Dim dtQuelle As New DataTable
ds2.Tables.Add(dtQuelle)
Dim sqlQuelle As String = "select Datum, bericht from
berichte where lfd_nr = " & Convert.ToInt32(PersonenDataGridView.Item(0,
PersonenDataGridView.CurrentRow.Index).Value.ToString)
Dim myOleDbDataAdapter As OleDb.OleDbDataAdapter
myOleDbDataAdapter = New OleDb.OleDbDataAdapter(sqlQuelle,
myOleDbConnection)
myOleDbDataAdapter.Fill(dtQuelle)

Dim DR As DataRow

'jetzt verknüpfte Daten übertragen
For n2 = 0 To dtQuelle.Rows.Count - 1
DR = dtQuelle.Rows(n2)

Dim drBerichte As DataRow = dtVerknDat.NewRow()

drBerichte("Patid") = IdLetztenSatzes
drBerichte("Datum") = DR.Item(0).ToString
drBerichte("bericht") = DR.Item(1).ToString

Dim adapter2 As SqlDataAdapter = New
SqlDataAdapter(SQLBer, OpenConnection)
Dim builder2 As SqlCommandBuilder = New
SqlCommandBuilder(adapter2)

adapter2.InsertCommand = builder2.GetInsertCommand
dtVerknDat.Rows.Add(drBerichte)
adapter2.Update(dtVerknDat)

Next n2
bs.MoveNext()
Next n

MsgBox("Fertig!")
Catch Ausnahme As Exception
MsgBox(Ausnahme.ToString)
End Try

Danke für alle Ideen!
Uwe
 

Lesen sie die antworten

#1 Uwe Conradi
25/04/2010 - 22:13 | Warnen spam
Sorry, ich habe die Meldung vergessen, die kommt:

Die CLR konnte 60 Sekunden lang keinen Übergang vom COM-Kontext 0x79c3d0 zum
COM-Kontext 0x79c540 durchführen. Der Thread, der Besitzer des
Zielkontexts/-apartments ist, wartet entweder, ohne Meldungen zu
verschieben, oder verarbeitet eine àußerst lang dauernde Operation, ohne
Windows-Meldungen zu verschieben. Eine solche Situation beeintràchtigt in
der Regel die Leistung und kann sogar dazu führen, dass die Anwendung nicht
mehr reagiert oder die Speicherauslastung immer weiter zunimmt. Zur
Vermeidung dieses Problems sollten alle STA-Threads (Singlethread-Apartment)
primitive Typen verwenden, die beim Warten Meldungen verschieben (z.B.
CoWaitForMultipleHandles), und bei lange dauernden Operationen generell
Meldungen verschieben.

Ähnliche fragen