DateSet

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Thias.

    Ichprüfe hier ob es die Category gibt

    VB.NET-Quellcode

    1. If Not frmMain.Produkte.Category.Rows.Contains(CategoryName) Then
    2. addCategory(CategoryName)
    3. End If

    CategoryName ist ein string,btw

    Mein Problem ist, dass ich in der Tabelle "Category" keinen Primärschlüssel festlegen kann weil folgender fehler dann kommt

    Screenshot
    ?(

    Danke imVoraus




    LG
    Arayni.setExperience(Experience.Beginner)
    Sehr seltsamer Fehler!

    Hast Du die Tabelle selbst erstellt oder von irgendeiner Datenbank eingelesen?

    Jedenfalls würde ich die Tabelle noch einmal löschen und neu erstellen - sofern Du dies noch nicht ausprobiert hast.

    Edit: @arayni - gut - konnte an sich nur so etwas sein - Visual Studio verschluckt sich halt manchmal

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

    Sehr empfehle ich dir meine 3 Artikel auf Codeproject: codeproject.com/Articles/10309…l-Datamodel-for-Beginners
    Weil dass du ein relationales Datenmodell aufbaust ist schoma sehr gut :thumbsup: , aber deine Benamung ist inkonsistent, und dass bei Item der Name Primkey ist statt der Id ist auch unlogisch.
    Also studiere die Artikel.
    Richtig angewandt kann man so sehr effektiv und sauber programmieren - man muss aber wirklich verstehen, was man macht, bis in Details hinein.
    Aber warum hast du dann zusätzlich noch eine Id? Und die nicht PrimKey ist?

    Ansonsten haste recht, da kanns auch Sinn machen, einen String zum Primkey zu machen. Aber wie gesagt: die numerische ID verliert dann evtl. ihre Funktion. Oder man belässt sie, je nach den Umständen. Aber wenn belassen, dann soll sie auch Primkey sein.

    arayni schrieb:

    Super Idee

    Seh ich nicht so.
    ich rate von Datatable.Select() immer ab, denn es ist eine untypisierte Funktion.
    Mach solche Untersuchungen lieber mit Linq, das ist typisiert.

    VB.NET-Quellcode

    1. dim NameGibtsSchon As Boolean = myDataset.Items.Contains(function(item)item.Name = CategoryName)
    Und gib der Item-Tabelle einen vernünftigen Namen, Item ist ein vielbenutztes Wort, da kannste drauf warten, dass Namens-konflikte und Verwechslungen auftreten.

    Ausserdem sagt es garnix aus, aber das Grundprinzip
    Nomen est Omen!
    fordert, dass Namen das aussagen sollen, was sie darstellen.

    arayni schrieb:

    Gibt es denn auch eine Methode durch den Namen die ID rauszufinden?

    Lies das Tut, da lernst du, dass die Namen von IDs irrelevant sind.
    Also du kannst sie mit Leichtigkeit herausfinden, aber wozu die Id eines Datensatzes herausfinden, wenn man schon den ganzen Datensatz hat?
    Und das typisierte Proggen mit typDataset verwendet die Ids sogut wie nie.
    Lies das Tut, dass du lernst, was die stattdessen machen.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    dim NameGibtsSchon As Boolean = myDataset.Items.Contains(function(item)item.Name = CategoryName)



    Ich verstehe leider diese Linq Function net :/


    Und meinst du das Tut von Codeproject?
    Arayni.setExperience(Experience.Beginner)

    arayni schrieb:

    Ich verstehe leider diese Linq Function net

    Deswegen hatte ich meine Lösung auch nicht mit Linq gemacht - aber @ErfinderDesRades hat an sich trotzdem recht - beim typisierten DataSet sollten untypisierte Funktionen vermieden werden und keine "Hacks" eingebaut werden.

    Allerdings so wie @ErfinderDesRades die Funktion gepostet hat, bekomme ich es auch nicht angepasst ans Laufen.

    Folgendes funktioniert bei mir:

    VB.NET-Quellcode

    1. Dim CategoryGibtsSchon As Boolean = Produkte.Category.AsEnumerable().Any(Function(row) row.CategoryName = CategoryName)


    Edit: @arayni folgende Lösung ist wahrscheinlich einfacher zu verstehen:

    VB.NET-Quellcode

    1. Dim CategoryGibtsSchon As Boolean = Produkte.Category.Where(Function(row) row.CategoryName = CategoryName).Any


    Ansonsten: LinqToDataset

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Thias“ ()

    arayni schrieb:

    Gibt es denn auch eine Methode durch den Namen die ID rauszufinden?

    Wie @ErfinderDesRades schon schrieb, macht es an sich wenig Sinn die ID auszulesen - aber ein Datensatz kann ja auch noch andere Felder haben, deswegen doch ein Beispielcode.

    VB.NET-Quellcode

    1. Dim CategoryRows = Produkte.Category.Where(Function(row) row.CategoryName = CategoryName)
    2. For Each Row In CategoryRows
    3. CategoryName = Row.CategoryName
    4. CategoryId = Row.CategoryID
    5. ' usw. wenn noch andere Felder existieren im Datensatz
    6. Next

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