Nicht typisiertes Dataset, Datenmodel

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Nicht typisiertes Dataset, Datenmodel

    Hallo,

    bin dabei meinen Datenzugriff zur Datenbank zuändern. Typisierte Datasets mag ich einfach nicht.
    Habe mir da eine Lösung für untypsierte Datasets erarbeitet.
    Bevor ich da nun weiter mache (sind doch viele Tabellen in den Datenbanken) würde ich Euch bitten, mal drüber zu schauen.
    Nicht das ich einen Denkfehler oder sonst einen Fehler im Code habe.

    Spoiler anzeigen


    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Data.OleDb
    4. Public Class DatenDS
    5. Private Halt As Boolean
    6. Public Tabellenliste As New List(Of CDatatools)
    7. Public AktuellesDatentool As New CDatatools
    8. Public MBKOCH_DatenDS As New CDatatools ' Anzulegen für jede Tabelle der Datenbanken
    9. Public MBKOCH_Inhalt As New CDatatools
    10. Public MBSOFT_Zeitplan As New CDatatools
    11. Private Modus As String
    12. Private I As Integer
    13. Private Sub DatenDS_Load(sender As Object, e As EventArgs) Handles Me.Load
    14. Me.Visible = False
    15. Me.Opacity = 0
    16. Me.Visible = True
    17. Me.Halt = True
    18. Daten.DSMBSoft = New DataSet
    19. Daten.DSMBKoch = New DataSet
    20. Monitor.Form_Initalisieren(Me)
    21. Me.Modus = "A"
    22. Me.MBKOCH_DatenDS.Name = "MBKOCH DatenDS"
    23. Me.MBKOCH_Inhalt.Name = "MBKOCH Inhalt"
    24. Me.MBSOFT_Zeitplan.Name = "MBSOFT Zeitplan"
    25. With Me.Tabellenliste
    26. .Add(Me.MBKOCH_DatenDS)
    27. .Add(Me.MBKOCH_Inhalt)
    28. .Add(Me.MBSOFT_Zeitplan)
    29. End With
    30. With Me.TS_Part.ComboBox
    31. For I = 0 To Me.Tabellenliste.Count - 1
    32. .Items.Add(Me.Tabellenliste(I).Name)
    33. Next
    34. .Text = Me.Tabellenliste(0).Name
    35. End With
    36. Me.DatasetLaden()
    37. Me.Halt = False
    38. Me.Opacity = 1
    39. End Sub
    40. Private Sub DatasetLaden()
    41. Me.MBKOCH_DatenDS.Initalisieren(Daten.DSMBKoch, Daten.Verbindungsstring_MBKOCH, "DatenDS", Me.MBKOCH_DatenDS)
    42. Me.MBKOCH_Inhalt.Initalisieren(Daten.DSMBKoch, Daten.Verbindungsstring_MBKOCH, "Inhalt", Me.MBKOCH_Inhalt)
    43. Me.MBSOFT_Zeitplan.Initalisieren(Daten.DSMBSoft, Daten.Verbindungsstring_MBSOFT, "Zeitplan", Me.MBSOFT_Zeitplan)
    44. Me.AktuellesDatentool = Me.Tabellenliste(0)
    45. Me.DGV_Zuordnung()
    46. End Sub
    47. Private Sub TS_Speichern_Click(sender As Object, e As EventArgs) Handles TS_Speichern.Click
    48. If Me.Halt Then Exit Sub
    49. Me.Validate()
    50. With Me.AktuellesDatentool
    51. .DataBinding.EndEdit()
    52. .DataAdapter.Update(.DS.Tables(.Tabellenname))
    53. End With
    54. Me.DGV_Ausgabe.ReadOnly = True
    55. Me.AktuellesDatentool.DS.Tables(AktuellesDatentool.Tabellenname).Clear()
    56. With Me.AktuellesDatentool
    57. .Initalisieren(.DS, .Datenverbindung, .Tabellenname, Me.AktuellesDatentool, .SelectString)
    58. End With
    59. Me.Modus = "A"
    60. End Sub
    61. Private Sub TS_Korrektur_Click(sender As Object, e As EventArgs) Handles TS_Korrektur.Click
    62. If Me.Halt Then Exit Sub
    63. Me.DGV_Ausgabe.ReadOnly = False
    64. End Sub
    65. Private Sub TS_Neuanlage_Click(sender As Object, e As EventArgs) Handles TS_Neuanlage.Click
    66. If Me.Halt Then Exit Sub
    67. Me.Modus = "N"
    68. Me.DGV_Ausgabe.ReadOnly = False
    69. Me.AktuellesDatentool.DataBinding.AddNew()
    70. End Sub
    71. Private Sub TS_Loeschen_Click(sender As Object, e As EventArgs) Handles TS_Loeschen.Click
    72. If Me.Halt Then Exit Sub
    73. Dim JaNein As DialogResult = MessageBox.Show("Möchten Sie nun den Datensatz löschen?", "Löschbestätigung" & Programm.Copyright_Messagebox,
    74. MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    75. If JaNein = DialogResult.No Then Exit Sub
    76. AktuellesDatentool.DataBinding.RemoveCurrent()
    77. End Sub
    78. Private Sub TS_Abbruch_Click(sender As Object, e As EventArgs) Handles TS_Abbruch.Click
    79. If Me.Halt Then Exit Sub
    80. If Me.Modus = "N" Then
    81. AktuellesDatentool.DataBinding.RemoveCurrent()
    82. End If
    83. Me.DGV_Ausgabe.ReadOnly = True
    84. End Sub
    85. Private Sub TS_Aus_Click(sender As Object, e As EventArgs) Handles TS_Aus.Click
    86. If Me.Halt Then Exit Sub
    87. Me.Close()
    88. End Sub
    89. Private Sub TS_Part_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TS_Part.SelectedIndexChanged
    90. If Me.Halt Then Exit Sub
    91. For I = 0 To Me.Tabellenliste.Count - 1
    92. If Me.TS_Part.ComboBox.Text = Me.Tabellenliste(I).Name Then
    93. Me.AktuellesDatentool = New CDatatools
    94. Me.AktuellesDatentool = Me.Tabellenliste(I)
    95. End If
    96. Next
    97. Me.DGV_Zuordnung()
    98. End Sub
    99. Private Sub DGV_Zuordnung()
    100. With Me.DGV_Ausgabe
    101. .DataSource = Nothing
    102. .DataSource = Me.AktuellesDatentool.DataBinding
    103. For I = 0 To Me.AktuellesDatentool.DS.Tables(Me.AktuellesDatentool.Tabellenname).Columns.Count - 1
    104. .Columns(I).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    105. If .Columns(I).Name = "ID" Then .Columns(I).Visible = False
    106. Next
    107. .ReadOnly = True
    108. End With
    109. With Me.Label_ID
    110. .DataBindings.Clear()
    111. .DataBindings.Add("Text", Me.AktuellesDatentool.DataBinding, "ID", True)
    112. End With
    113. End Sub
    114. Private Sub DGV_Ausgabe_SelectionChanged(sender As Object, e As EventArgs) Handles DGV_Ausgabe.SelectionChanged
    115. If Me.Halt Then Exit Sub
    116. With Me.Label_ID
    117. .DataBindings.Clear()
    118. .DataBindings.Add("Text", Me.AktuellesDatentool.DataBinding, "ID", True)
    119. End With
    120. End Sub
    121. Public Class CDatatools
    122. Public DS As DataSet
    123. Public Name As String
    124. Public SelectString As String
    125. Public Tabellenname As String
    126. Public Datenverbindung As String
    127. Public DataAdapter As New OleDbDataAdapter
    128. Public Commandbilder As OleDbCommandBuilder
    129. Public DataBinding As New BindingSource
    130. Public Sub Initalisieren(ByVal Datenset As DataSet, ByVal Verbindung As String, ByVal Tabellennamen As String, ByVal Tool As CDatatools,
    131. ByVal Optional Selectanweisung As String = "SELECT * From ")
    132. With Me
    133. .DS = Datenset
    134. .Tabellenname = Tabellennamen
    135. .Datenverbindung = Verbindung
    136. .SelectString = Selectanweisung
    137. End With
    138. Dim Selection As String = Selectanweisung & Tabellennamen
    139. Me.DataAdapter = New OleDbDataAdapter(Selection, Verbindung)
    140. Me.Commandbilder = New OleDbCommandBuilder(Me.DataAdapter)
    141. With Me.DataAdapter
    142. .UpdateCommand = Me.Commandbilder.GetUpdateCommand
    143. .InsertCommand = Me.Commandbilder.GetInsertCommand
    144. .DeleteCommand = Me.Commandbilder.GetDeleteCommand
    145. .Fill(Datenset, Tabellennamen)
    146. End With
    147. Me.DataBinding.DataSource = Datenset.Tables(Tabellennamen)
    148. DatenDS.AktuellesDatentool = Tool
    149. End Sub
    150. End Class
    151. End Class




    Danke
    Gruß Markus
    Dürfte ich dich fragen, was genau dich denn an typisierten DataSets stört? Ich habe zwar noch nie ernsthaft mit DS gearbeitet, jedoch weiß ich, dass man, wenn richtig angewandt, man damit sehr bequem arbeiten kann. Andererseits weiß ich auch um etliche andere Möglichkeiten um auf eine Datenbank zuzugreifen. Vielleicht gibt es ja was, was deinen Bedürfnissen eher entspricht?