Hallo,
ich beschäftige mich als Neuling in VB.NET (Umstieg von VB6) im Moment mit der Lebensdauer von Variablen.
Nach vielem Lesen in Büchern und Foren bin ich nicht wirklich schlauer als vorher.
Soviel ich bisher verstanden habe soll alles was man "disposen" kann auch "disposed" werden. Alle anderen Sachen werden von alleine ungültig bei verlassen der Sub oder Schließen der Form.
Aber ganz klar ist mir nicht wann und wie ich "disposen" muss oder kann.
z.B. habe ich mir folgende Sub in einem Modul geschrieben um nicht bei jeder Combobox den ganzen Kram schreiben zu müssen.
Eigenlich sollten doch der DbDataAdapter DA und die DataTable DT "Disposed" werden, oder? Beide habe eine Dispose-Methode. Wenn ich aber die DataTable dispose ist die ComboBox danach leer
Wenn ich jetzt schreibe:
dann funktioniert es und die Combobox bleibt gefüllt.
Das bedeutet aber das der DataTable nicht "disposed" wird. Stimmt das?
Und wenn das so ist, wann und wie muss ich DT "disposen". Ich komme ja nicht mehr ran.
Ist ja innerhalb einer Sub definiert. Oder soll ich für die ganze Anwendung global den DataAdapter und die DataTable definieren und jedesmal die gleichen DA und DT benutzen. Dann könnte man bequem beim Beenden der Anwendung "disposen". Geht das überhaupt, kommen die sich nicht irgendwann in die Quere?
Wenn das nicht geht, wäre es schön wenn mir jemand einen Tip geben könnte.
Viele Grüße
Gregor
ich beschäftige mich als Neuling in VB.NET (Umstieg von VB6) im Moment mit der Lebensdauer von Variablen.
Nach vielem Lesen in Büchern und Foren bin ich nicht wirklich schlauer als vorher.
Soviel ich bisher verstanden habe soll alles was man "disposen" kann auch "disposed" werden. Alle anderen Sachen werden von alleine ungültig bei verlassen der Sub oder Schließen der Form.
Aber ganz klar ist mir nicht wann und wie ich "disposen" muss oder kann.
z.B. habe ich mir folgende Sub in einem Modul geschrieben um nicht bei jeder Combobox den ganzen Kram schreiben zu müssen.
VB.NET-Quellcode
- Public Sub FuelleComboBox(cbo As ComboBox, sql As String, DispMember As String, ValMember As String)
- Dim DA As DbDataAdapter = PrFactory.CreateDataAdapter 'DbProviderFactories
- Dim DT As New DataTable
- DA.SelectCommand = PrFactory.CreateCommand
- DA.SelectCommand.Connection = FConn
- DA.SelectCommand.CommandText = sql
- DA.Fill(DT)
- cbo.DisplayMember = DispMember
- cbo.ValueMember = ValMember
- cbo.DataSource = DT
- DA.Dispose()
- 'DT.Dispose() geht nicht, sonst ist die Box leer.
- End Sub
Eigenlich sollten doch der DbDataAdapter DA und die DataTable DT "Disposed" werden, oder? Beide habe eine Dispose-Methode. Wenn ich aber die DataTable dispose ist die ComboBox danach leer
Wenn ich jetzt schreibe:
dann funktioniert es und die Combobox bleibt gefüllt.
Das bedeutet aber das der DataTable nicht "disposed" wird. Stimmt das?
Und wenn das so ist, wann und wie muss ich DT "disposen". Ich komme ja nicht mehr ran.
Ist ja innerhalb einer Sub definiert. Oder soll ich für die ganze Anwendung global den DataAdapter und die DataTable definieren und jedesmal die gleichen DA und DT benutzen. Dann könnte man bequem beim Beenden der Anwendung "disposen". Geht das überhaupt, kommen die sich nicht irgendwann in die Quere?
Wenn das nicht geht, wäre es schön wenn mir jemand einen Tip geben könnte.
Viele Grüße
Gregor