Von Eigenarbeit auf Designer umsteigen mit Kompatibilität zu PHP usw.

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

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Rootbob91.

    Von Eigenarbeit auf Designer umsteigen mit Kompatibilität zu PHP usw.

    Hey Leute,

    heute war ich wieder mal so ein bissl am Schmunzeln/Überlegen, dass ich wohl in meiner Programmierweise was ändern muss.
    Und zwar gehe ich bisher eigentlich zu 100% selber an die Sachen ran, heißt -> das ich im Endeffekt alles selber schreibe und eigentlich nie den Designer für Datenbank-Arbeit wähle.

    Bisher hab ich den Vorteil gesehen, das Speichern, Laden usw. komplett selber zu bestimmen, sprich z.B. zu einem Webserver mit Requests o. ä.

    Aktuell versuche ich mich aber ein wenig mehr an die designer-orientierte Methode heranzuarbeiten.

    - Mein erster Versuch war vor einiger Zeit mit einem typisierten Dataset & XML. Links zu den Tutorials vom EDR findet man ja wie Sand am Meer ;).
    - Heute machte ich mich dann an einen Versuch mit SQL CE ran.

    Ich musste feststellen, dass ich bisher mit der Eigenfummelei am besten arbeiten konnte..
    Ich glaube allerdings, dass es da wohl irgendeinen Mittelweg geben muss, um mir Arbeit zu ersparen, welcher dann in Richtung Designer-Arbeit geht, aber trotzdem noch Kompatibiltät zu anderen Systemen wie zb. Mysql mit Hilfe eines Webrequests bietet.

    Bin da momentan irgendwie son bissl auf dem Scheideweg :/.
    Fakt ist: Falls es bei Windows Only bleibt, ist es soweit kein Problem mit den Datasets usw., allerdings bleibt es das bei meinen Projekten so gut wie nie und ich muss irgendwie die Möglichkeit haben da vernünftig mit Webservern zu arbeiten.

    Habt ihr Tipps oder Anregungen?
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Ich sehe ein typDataset eiglich nicht im Widerspruch zu einem WebRequest oder whatever.
    Ist halt bischen lästig, mit einem WebRequest ein typDataset zu befüllen.

    Es muss auch kein typDataset sein, hauptsache du hast irgendein typisiertes Datenmodell.
    typDataset hat halt den Vorzug, dass es ein relationales Datenmodell ist. Serialisierte Objekte sind allenfalls hierarchische Datenmodelle.
    Um ein bisschen damit zu spielen, habe ich mir erstmals einen MSSQL Server auf meinem Hauptrechner aufgesetzt.

    Die ersten Spielereien klappten mit deinen Beispielprojekten auch super.
    Das Anlegen von Datasets, die Bindung einer BindingSource an zb. einem DataGridView und auch die Bindung des ausgewählten Items an zb. eine TextBox.

    Das ging alles, insofern ich eine Hauptform nahm und sich die Sache dort abspielte.
    Ich bin auch echt begeistert, was ich mir nach anfänglichen Designarbeiten an anschließender Arbeit sparen konnte.

    Meine Frage wäre jetzt allerdings:
    Wie funktioniert das Ganze, wenn ich eine extra Form als Darstellung/Bearbeitung/Neuanlage nutzen will, einfach um alles ein wenig schöner darzustellen?

    Ich hatte erstmals eine neue Form angelegt und versucht, dort jeweilige Einstellungen zu treffen, aber die jeweilige BindingSource steht dort wahrscheinlich durch Zugriffsprobleme nicht zur Verfügung.
    Wie teile ich der neuen Form mit, welchen Datensatz sie "bedienen" soll?

    Wie geht man dort mit Bearbeitung und Neuanlage vor? Soll ich dafür 2 getrennte Forms machen? Ich schätze schon, oder?

    EDIT:
    Habs wie hier gelöst.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

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

    ich hab deren Download nicht getestet, v.a. weil ich keine Northwind auf meim SqlServer hab.

    Aber kannst dir auch mal Daten laden, speichern, verarbeiten - einfachste Variante , das ist meine Art, mit form-übergreifendem Databinding umzugehen.
    Dabei breucht man keinen erneuten Zugriff auf die DB - ich fürchte, das ist was Beth da macht, aber sicher bin ich natürlich nicht.
    Nee, macht sie auch nicht.
    Das einzige, was mir zu fehlen scheint ist die Möglichkeit zu canceln, also Eingaben ungeschehen sein lassen.

    Aber guck dir mein Teil mal an, da bindet man die Dll ein, und dann ist das ein Einzeiler.
    Weil das ist ja mit jedem Dialog dasselbe, daher braucht man das nicht jedesmal neu zu coden.
    Ah ok.

    Also ansehen werde ichs mir definitiv nochmal, danke :).

    Ich sehe das mit dem erneuten Zugriff bei einem Datensatz gar nicht so schlimm.
    Wenn bspw. mit mehreren Clients gearbeitet wird und du dann die Datensätze anzeigst, einen davon zur Detailansicht auswählst, dann könnte es doch bestimmt nicht schaden die jetzt aktuellen Infos von diesem Datensatz zu laden, da ein andere Client ggf. seit deiner persönlichen letzten Aktualisierung daran gearbeitet hatte, oder wie meinst/siehst du das?

    Das wäre ja Bombe :D
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Jo, als Option der Infrastruktur muss das möglich sein, im Zusammenhang mit Multi-User-Anwendungen (das wird aber noch komplizierter).
    Aber zwangsweise, einfach weil man die Daten innerhalb des Clients nicht effizient handeln kann, ...

    Und meine eigene letzte Bearbeitung will ich bestimmt nicht nochmal nachladen, das wäre ja den Bademeister fragen, ob ich schwimmen kann.
    Hab mir mal deinen obigen verlinkten Post angesehen und bin desweiteren auf diesen hier gestoßen. Leider bekomme ich im VS 2015 die Fehlermeldungen bei den Projekten, dass das Projekt eine Benutzereingabe erfordert.
    Die kann ich leider nirgendwo tätigen. Hab ebenfalls versucht die Projekte einzelnd zu öffnen, statt mit der zusammengefassten sln Datei, geht ebenfalls nicht.

    Nene, klar, also die eigene Bearbeitung steht ja außer Frage, nur halt eben dieses ich nenns mal "Cross-Client"-Szenario, dass eben halt mehrere Köche am Brei arbeiten.
    Das ist ja leider meistens der Fall, jedenfalls in meinen Projekten^^..
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Hmm, oke.

    Ich hab noch ne andere Frage, hab bisher gegoogelt aber nichts gefunden und es kann ja auch sein, dass ich nachher samples etc. mische, daher Frage ich lieber hier.

    Ich hab mir jetzt eine Form zusammengeklickst:
    - Bei Datenquellen meine MSSQL DB angegeben und konfiguriert
    - Via Datenquellen-Fenster ein DataGridView auf die Form gezogen und angepasst
    - Accept-Button usw. festgelegt

    Die Daten, bzw die Veränderungen daran werden wie gewollt ins DataSet gespeichert, wie bekomme ich die Daten nun zurück in die Datenbank?

    Google ergab bisher, dass ich einen SQLDataAdapter in Kombination mit einem SqlCommandBuilder benötige?
    Ich glaube allerdings, dass ich deine Variante aus den Tutorials mit dem hier aus meiner Suche vermische. Wäre natürlich n bissl plöd.

    PS: Ansonsten hatte ich das noch so probiert, will aber nicht, bekomme keinen Fehler und beim nächsten Start der Anwendung sind die geänderten Daten weg, heißt also er speicherts nicht zurück in die DB :)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
    2. Try
    3. Me.Validate()
    4. Me.DieBindingSource.EndEdit()
    5. Me.DerTableAdapter.Update(Me.DasDataSet.chin)
    6. MessageBox.Show("Update successful")
    7. Catch ex As Exception
    8. MessageBox.Show("Update failed")
    9. End Try
    10. End Sub

    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

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

    Ne also die Samples aus der obigen genannten Sammlung gehen nicht, habe die aber teils schon einzelnd gefunden, Phonebook zb.

    Den Link schau ich mir an.

    EDIT: Habs mir angesehen.
    Also da ich ja bspw. keine mdb Datei oder so habe, bin ich halt auf "DasDataSet.xsd" gegangen, hab da die Eigenschaften geöffnet und da stand die Property "Ins Ausgabeverzeichnnis kopieren" auf "nicht kopieren", hab mal probiert das auf "immer kopieren" zu setzen, aber es passierte ebenfalls nichts.

    Alternativ hab ichs mal so probiert, von diesem Link, da kommt dann, dass das Select Command initialisiert werden soll, aber dachte halt der braucht Update.. Scheinbar holt er sich das aber wenns richtig läuft durch die gleichnamige Methode:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Try
    2. Me.Validate()
    3. Me.DieBindingSource.EndEdit()
    4. Me.DerTableAdapter.Update(Me.DasDataSet.chin)
    5. Using connection As New SqlClient.SqlConnection(My.Settings.ConnectionString)
    6. connection.Open()
    7. Dim adapter = New SqlClient.SqlDataAdapter()
    8. adapter.UpdateCommand = New SqlClient.SqlCommand("UPDATE tabelle SET name='" & NameTextBox.Text & "' WHERE id=" & Label1.Text, connection)
    9. Dim builder = New SqlClient.SqlCommandBuilder(adapter)
    10. builder.GetUpdateCommand()
    11. adapter.Update(DasDataSet)
    12. DasDataSet.AcceptChanges()
    13. End Using
    14. MessageBox.Show("Update successful")
    15. Catch ex As Exception
    16. MessageBox.Show(ex.Message, "Update failed")
    17. Clipboard.SetText(ex.Message)
    18. End Try


    Dann tat ich dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Try
    2. Me.Validate()
    3. Me.DieBindingSource.EndEdit()
    4. Me.DerTableAdapter.Update(Me.DasDataSet.chin)
    5. Using connection As New SqlClient.SqlConnection(My.Settings.ConnectionString)
    6. connection.Open()
    7. Dim adapter = New SqlClient.SqlDataAdapter()
    8. adapter.SelectCommand = New SqlClient.SqlCommand("SELECT * FROM tabelle", connection)
    9. Dim builder = New SqlClient.SqlCommandBuilder(adapter)
    10. builder.GetUpdateCommand()
    11. adapter.Update(DasDataSet)
    12. DasDataSet.AcceptChanges()
    13. End Using
    14. MessageBox.Show("Update successful")
    15. Catch ex As Exception
    16. MessageBox.Show(ex.Message, "Update failed")
    17. Clipboard.SetText(ex.Message)
    18. End Try

    Da kommt dann folgender Fehler: Dynamische SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand unterstützt, der keine Schlüsselspalteninformationen zurückgibt.
    Also Primärschlüssel sind selbstverständlich in der DB sowie im DataSet hinterlegt.

    Zum Schluss bin ich nu bei dem hier stehengeblieben:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Try
    2. Me.Validate()
    3. Me.DieBindingSource.EndEdit()
    4. Me.DerTableAdapter.Update(Me.DasDataSet.chin)
    5. MessageBox.Show("Update successful")
    6. Catch ex As Exception
    7. MessageBox.Show(ex.Message, "Update failed")
    8. Clipboard.SetText(ex.Message)
    9. End Try


    Habs nu hinbekommen. Beziehungen waren im SQL Server selber nicht angegeben, dachte das übernimmt der Designer nach Konfiguration meinerseits.

    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Rootbob91“ ()