DB Zugriff Fehler mit SQLCePersistance

  • VB.NET
  • .NET 5–6

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

    DB Zugriff Fehler mit SQLCePersistance

    Servus Leute,

    ich bastel mir gerade ein Programm, welches auf meinem Pi (Linux, ARM64) laufen soll, um mehrere Datensätze von verschiedenen Lieferanten in einem DataSet zu aktualisieren und diese in eine (Localen) MariaDB abzuspeichern.

    Leider schaffe ich es nicht, mit der SqlCEPersistance Class von ErfinderDesRades, eine Datenbankverbindung herzustellen.

    Ich weiß leider nicht, ob es daran liegt, da ich ja für ein anderes Betriebssystem, Linux, und einer anderem Architektur, ARM64, oder am .Net6.0 liegt.Oder aber ich denk SQL-Verweis falsch eingegeben habe.

    Beim Versuch des Aufbaues mit der Datenbank bekomme ich ständig den Fehler:
    Spoiler anzeigen
    FileNotFoundException: Could not load file or assembly 'System.Security.Permissions, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. Das System kann die angegebene Datei nicht finden.



    in der Zeile 3 vom Code:

    VB.NET-Quellcode

    1. Public Sub New(connectionString As String, dts As DataSet)
    2. _Dts = dts
    3. _Con = New SqlCeConnection(connectionString)
    4. _RequeryIdCommand = New SqlCeCommand("SELECT @@IDENTITY", _Con)
    5. Dim sorter = New TopologicSort(dts.Tables.Cast(Of DataTable), True)
    6. _RankedTables = sorter.GetRankedTables
    7. _Adapters = New Dictionary(Of DataTable, SqlCeDataAdapter)
    8. For Each tb In _RankedTables
    9. Dim adp = New SqlCeDataAdapter("Select * from [" & tb.TableName & "]", _Con)
    10. Dim cmb = New SqlCeCommandBuilder(adp)
    11. If tb.PrimaryKey.Length = 1 AndAlso tb.PrimaryKey(0).AutoIncrement Then
    12. AddHandler adp.RowUpdated, AddressOf Table_RowUpdated ' not neccessary, if in-/out-DbParameter-Support is present
    13. End If
    14. _Adapters.Add(tb, adp)
    15. Next
    16. End Sub


    Aufgerufen wird die Funktion:

    VB.NET-Quellcode

    1. _Persistance = New SqlCePersistance("Integrated Security=SSPI;addr = LOCALHOST;Password = ;User=root;", Lieferanten)


    ________EDIT_____________
    Habe gerade gesehen, er zeigt mir bzgl. des Imports der SqlServerCe folgende Warnung an:

    Spoiler anzeigen
    Beschreibung
    Das Paket "Microsoft.SqlServer.Compact 4.0.8876.1" wurde nicht mit dem Projektzielframework "net6.0", sondern mit ".NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8" wiederhergestellt. Dieses Paket ist mit Ihrem Projekt möglicherweise nicht vollständig kompatibel.


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

    trix0 schrieb:

    Leider schaffe ich es nicht, mit der SqlCEPersistance Class von ErfinderDesRades, eine Datenbankverbindung herzustellen.

    Du versuchst ja auch mit SqlCe auf MariaDB (= MySQL) zuzugreifen.. probier's mit der MySqlPersistance, damit klappt's bei mir zumindest ;)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    trix0 schrieb:

    sondern "nur" das der Host angeblich unbekannt ist.

    Bei mir sieht der ConnectionString in etwa so aus: Dts._sCon = "Server=SERVER-IP; UID=USERNAME; password=PASSWORT; Initial Catalog=DATENBANKNAME;"
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Also erstmal danke für die antworten.

    nun habe ich das Problem, das er mir nicht die Daten holen mag.

    habe genau die Gleiche Syntax verwendet wie in der UI von der MariaDB.

    VB.NET-Quellcode

    1. _Persistance = New MySqlPersistance("Server= 127.0.0.1;User ID=root;Database=lieferanten;", Lieferanten) 'Aufbau der Verbindung zu Datenbank
    2. _Persistance.CustomFill(Lieferanten.Daten, "Select ALL From daten;") 'Holen der Daten aus der Tabelle Daten mit dem gleichen aufbau


    beim ausführen von

    VB.NET-Quellcode

    1. CustomFill
    kommt der Fehler:
    Spoiler anzeigen
    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '[Daten] Select * From daten' at line 1"



    Ansich, so wie ich es verstehe, passt ihn meine syntax nicht. aber genau mit dieser Syntax frage ich die Daten in dem UI ab. Da funktioniert es problemlos.
    Documentation:
    mariadb.com/kb/en/select/
    mach mal SELECT * FROM daten oder SELECT * FROM 'daten'
    hast du kein DataSet, wo die Daten "reingeladen" werden? Dann müsstest du das sogar über's DataSet ansprechen und nicht über die Persistance selbst.
    Also dann kannste sowas machen: Dts.Tabelle.Customfill(...)
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Wenn du alle Daten aus der Tabelle haben willst, probier mal:
    daten.TablePersist.Fill TablePersist ist eine Extension in DataX - ich gehe davon aus, dass
    du die Persistance vom ErfinderDesRades nutzt.. die Tabelle muss mit der gleichen Struktur und Bezeichnung etc. in deinem DataSet vorhanden sein.
    Mir ist grad eingefallen, dass die CustomFill für WHERE gedacht ist, dass man nur Teile der Daten aus der Datenbank in's DataSet reinlädt.
    Nutze ich bei mir überwiegend, denn je nach Berechtigung werden nicht alle Daten gebraucht.

    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    So, ich habe es jetzt mit dem MySqlConnectionStringBuilder und dem MySqlDataAdapter gelöst. Ich habe mich hierbei auf die Persistance Klasse vom ErfinderdesRades festgefahren.

    VB.NET-Quellcode

    1. Dim conn_str = New MySqlConnectionStringBuilder
    2. conn_str.Server = "127.0.0.1"
    3. conn_str.Port = 3306
    4. conn_str.UserID = "root"
    5. conn_str.Database = "lieferanten"
    6. Using adapter = New MySqlDataAdapter("Select * From daten", conn_str.ToString)
    7. adapter.Fill(Lieferant.Daten)
    8. End Using
    wenn du damit besser zurecht kommst, warum nicht.
    ABER: ich würde dir dringend raten einen separaten User in der Datenbank anzulegen. Man sollte sowas nie über den Root-Zugang machen (auch wenn's nur Lokal ist).
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: