Datatable

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Hallo Leute,

    ich benutze zum füllen meines Datasets die Extensions von @ErfinderDesRades.

    Dies funktioniert auch einwandfrei und ich bin voll und ganz zufrieden damit.

    Jetzt ist es nur so, dass ich in mein Dataset eine Tabelle einfügen will, die NUR aus berechneten Spalten besteht und somit auch nicht in der DB existiert. Gibt es in den Extensions irgendeine Funktion in der man einzelne Tabellen ausschliessen kann? Oder wie muss ich die Extensions modifizieren, dass er mir diese Tabelle nicht laden will?

    Vielleicht noch:

    VB.NET-Quellcode

    1. Dim adp As New DatasetAdapter(MySqlClientFactory.Instance, MyConnStrg, ConflictOption.OverwriteChanges)
    2. adp.InitRequery_ID(Sub(dtsAdapter, dataAdapter) AddHandler DirectCast(dataAdapter, MySqlDataAdapter).RowUpdated, AddressOf dtsAdapter.RequeryID)
    3. ds.Adapter(adp)

    Bei der ds.Adapter(adp) fliegt er mit Fehler:
    Eine Ausnahme (erste Chance) des Typs "MySql.Data.MySqlClient.MySqlException" ist in MySql.Data.dll aufgetreten.

    Die Extension:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' sets the manager of all Tables, TableAdapters and BindingSources and stuff
    3. ''' </summary>
    4. <Extension()> _
    5. Public Function Adapter(ByVal dts As DataSet, ByVal value As DatasetAdapter) As DataSet
    6. Dim adp = dts.Adapter
    7. If adp.NotNull Then
    8. If adp Is value Then Return dts
    9. Throw value.Exception("Dataset.Adapter already initialized")
    10. End If
    11. value.DataSet = dts
    12. DatasetAdapterBase.Attachs(dts) = value
    13. Return dts
    14. End Function




    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TS71M“ ()

    jo, da gibts auch eine Dataset-Extension für:

    VB.NET-Quellcode

    1. Dim adp = New DatasetAdapter( _
    2. MySql.Data.MySqlClient.MySqlClientFactory.Instance, _
    3. "server=dd17626.kasserver.com;user id=unKnown;password=unKnown;persist security info=True;database=d0197ea0", _
    4. ConflictOption.OverwriteChanges)
    5. Me.NorthWindDts.Adapter(adp).Persist(False, NorthWindDts.Artikel, NorthWindDts.Kunden)
    Also der Bool wird auf alle im weiteren übergebenen Tabellen angewandt, du kannst also entweder benennen, was persistieren soll (und die anderen nicht), oder was nicht persistieren soll (und die anderen doch)
    Top :thumbsup:

    Danke.
    Anmerkung:

    VB.NET-Quellcode

    1. Me.NorthWindDts.Adapter(adp).Persist(False, NorthWindDts.Artikel, NorthWindDts.Kunden)

    funktioniert bei mir so nicht...

    VB.NET-Quellcode

    1. Me.NorthWindDts.Persist(False, NorthWindDts.Artikel, NorthWindDts.Kunden)
    2. Me.NorthWindDts.Adapter(adp)

    so funktioniert's

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TS71M“ ()

    Ich muss hier leider nochmal nachhaken ;)

    Ich möchte nun einen Reload des Datasets einbauen ohne das Programm neu starten zu müssen. Dachte eine DataSet.clear und dann einfach nochmal die fill Anweisungen durchlaufen lasssen würde reichen 8-) ...natürlich nicht.
    Und zwar beim persist aus dem vorigen Post fliegt er mir mit:
    DataSet-Exception:

    only call DataSet.Persist() **before** its Attachement is set


    Aus der Extension:

    VB.NET-Quellcode

    1. ''' <summary>mark these Tables as to persist. All other tables will behave contrary. This call isn't necessary, but optimizes startup</summary>
    2. <Extension()> _
    3. Public Sub Persist(dts As DataSet, value As Boolean, ParamArray tables As DataTable())
    4. If DatasetAdapterBase.Attachs.ContainsKey(dts) Then Throw dts.Exception("only call DataSet.Persist() **before** its Attachement is set")
    5. For Each tb As DataTable In dts.Tables
    6. With tb.Attach
    7. If .Persistance <> Persistance.Guess Then Throw .Exception("Persistance already set")
    8. .Persistance = If(value = tables.Contains(tb), Persistance.Yes, Persistance.No)
    9. End With
    10. Next
    11. End Sub


    Soweit so gut, steht ja eigentlich alles da, nur weiss ich nicht wo oder wie ?(