MS-SQL und Bilder!?

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    MS-SQL und Bilder!?

    Moin! :)
    Ich möchte gerne wissen, wie man in einer SQL Compact & SQL Server Datenbank, Bilder einfügen kann.
    Eine Verbindung zum SQL besteht, und ich kann Tabellen lesen und schreiben.
    Nun suche ich eine Möglichkeit, das gleiche mit Bildern.
    Freue mich auf eure Antworten.
    BIG THX
    Visual Basic.NET 8o
    MS-SQL
    8o
    Man kann die Bild Datei als Byte Array in die DB speichern. Das Feld in der DB muss halt den entsprechenden Datentypen besitzen. Das Speichern an sich, geht dann wie mit den anderen Datentypen auch.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich würde aber davon abraten, legt die Dateien auf die Platte und speichere in der Db den (Relativen)Pfad zu der Datei.
    Grundsätzlich geht das.
    Als Byte Array in ein Feld vom Typ Blob.

    Ich würde aber auf Grund der Größe davon abraten.
    Bei einem SQL Server Compact oder Express stößt du sonst schnell an die DB Grenze.
    Zudem wird auch das BackUp größer und langsamer.
    Wenn es geht lege einen Ordner, Pfad kann man ja konfigurierbar machen, an und speicherte die Bilder dort und in der DB einen Verweis auf das Bild.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Ich würde ein Blob-Feld nehmen und das Byte Array noch zusätzlich komprimieren, aber unbedingt mit einem Textfeld das den Namen der Datei enthält, damit man auch weis was da gespeichert wurde.

    Aktuell muss ich eine Datenbank migrieren in der Pfade zu Bildern und anderen Dokumenten abgelegt wurden. Die Datenbank ist inkonsistent, da die IT-Abteilung im laufe der Zeit zweimal die Laufwerke umbenannt hat. Von daher würde ich davon abraten Pfade zu speichern. Die Größe sollte bei einem Datenbankserver heutzutage auch kein Problem darstellen. Wie das mit der Compact Version ist kann ich nicht beurteilen.
    Gruß
    Christoph

    MrTrebron schrieb:

    Deshalb sollte der Pfad ja auch nicht im DB Feld gespeichert werden, sondern der Pfad in einer Konfig Datei.


    Stimmt, das würde gehen. Wobei, bei einem Server Client Szenario geht das auch nicht so einfach. Da muss man sich auch was einfallen lassen, wie die Dateien an den Zentralen Speicherort kommen, oder? Wie geht man vor wenn der Client keine Berechtigung für das Laufwerk hat? Ausserdem könnten die Daten manipuliert oder gelesen werden, ohne das der Server etwas davon mitbekommt. Mit gefällt die Lösung mit dem komprimierten Blob-Feld besser, dafür gibt es die ja. Alles hat wie immer Vor- und Nachteile. :)
    Gruß
    Christoph
    Der Server liest die Datei vom Filesystem und liefert an den Client aus.
    Somit braucht kein Client Zugriff. Ist ja bei Datenbankzugriffen auch so, nicht jeder Client sollte direkt auf die DB zugreifen.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

    MrTrebron schrieb:

    Der Server liest die Datei vom Filesystem und liefert an den Client aus.
    Somit braucht kein Client Zugriff.


    Wie geht das? Wie bekommt der Server dann die Files? Das kenne ich bisher nich nicht.

    BTW: Klingt sehr interessant: docs.microsoft.com/de-de/sql/r…lob/filetables-sql-server Damit sollte ich mich bei Gelegenheit mal auseinandersetzen.

    MrTrebron schrieb:

    st ja bei Datenbankzugriffen auch so, nicht jeder Client sollte direkt auf die DB zugreifen.


    Dann brauche ich aber eine REST API.
    Gruß
    Christoph
    Naja, wie sicherst du denn sonst deine Datenbank ab?

    Muss nicht zwingend REST sein, kommt ja auch drauf an ob der Client eine Windows Anwendung ist (WinForms, WPF) oder UWP, Webapp, iOS, Android oder was auch immer.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

    MrTrebron schrieb:

    Naja, wie sicherst du denn sonst deine Datenbank ab?


    Bisher gar nicht, die Server laufen alle in einem Firmennetzwerk. Wie unsicher das ist kann ich nicht beurteilen, das muss unsere IT machen, die betreiben i.d.R. auch die Server.


    MrTrebron schrieb:

    Naja, wie sicherst du denn sonst deine Datenbank ab?

    Muss nicht zwingend REST sein, kommt ja auch drauf an ob der Client eine Windows Anwendung ist (WinForms, WPF) oder UWP, Webapp, iOS, Android oder was auch immer.


    Ich bin nur im Windowsumfeld unterwegs, von daher kenne ich nur REST.

    REST mit ASP.Net Core finde ich sehr interessant. Ich finde das ist eine sehr schöne Möglichkeit den Datenbankzugriff wirklich aus dem Programm zu entkoppeln. Für jeden Datenbanktyp hat man dann einfach eine passende Web API. Aber für die meisten ist der Sicherheitsaspekt sicher der wichtigste Punkt.
    Gruß
    Christoph

    MrTrebron schrieb:

    Für die Sicherheit ist der Programmiere der Anwendung verantwortlich.


    Nein, ich programmiere nur gegen vorhandene Infrastruktur. Für die Sicherheit der Infrastruktur gibt es eine eigene Abteilung. Für die Sicherheit der Server sind die Betreiber in meinen Augen verantwortlich, wie sollte ich das als Programmierer übernehmen? Ich kann erst aktiv werden wenn die mir den direkten Zugriff verweigern, und bisher ist der direkte Zugriff Standard in unserem Unternehmen. Zu dem gibt es auch sehr viele zugekaufte Software die keine HTTP Requests unterstützt, da wird es sowie so schwierig die Server zu blocken. Aber wie bereits gesagt, ich kann auch nicht beurteilen wie sicher oder unsicher unsere Server in einem internen Netzwerk sind.


    MrTrebron schrieb:

    Für die Sicherheit ist der Programmiere der Anwendung verantwortlich.

    Btw. Es würde auch SOAP oder WCF gehen.


    Ich lese immerwieder das WCF obsolet ist und ASP.Net Core der neue Weg ist.
    Gruß
    Christoph
    Sorry, aber ich finde man kann sich da mit der Sicherheit nicht raus reden.
    Wenn meine APP eine Sicherheitslücke darstellt oder aufreißt, dann bin ich da mit verantwortlich.
    Ein SQL Server mit direkt Zugriff ist keine sichere Infrastruktur.

    github.com/dotnet/wcf
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

    MrTrebron schrieb:

    Sorry, aber ich finde man kann sich da mit der Sicherheit nicht raus reden.
    Wenn meine APP eine Sicherheitslücke darstellt oder aufreißt, dann bin ich da mit verantwortlich.
    Ein SQL Server mit direkt Zugriff ist keine sichere Infrastruktur.


    Meine Anwendungen stellen maximal das gleiche Sicherheitsrisiko dar, wie jede andere gekaufte App in unserem Laden auch. Das hat auch nichts mir rausreden zu tun, mein vorgehen ist (noch?) Standard bei uns und von daher habe ich da auch kein schlechtes Gewissen. Wie gesagt, wenn unsere IT die Anforderung stellt, dann gerne! In unserem Laden arbeiten viele Informatiker, sogar mit Promotion, ich vertraue denen einfach, dafür werden die bezahlt. :)


    MrTrebron schrieb:



    Danke für den Link!

    Einen guten Start in die Woche wünsche ich! :)
    Christoph
    Gruß
    Christoph
    @Cheffboss: ja es ist möglich.
    Es gibt BLOB Felder in der Datenbank in denen du die Bilder als Byte Array speichern kannst.
    Das Problem dabei ist halt das deine DB entsprechend wächst, was gerade bei den Compact und Express Edition zu Problemen führen kann, da es Beschränkungen der DB Größe gibt.

    Hast du zwischen deiner Anwendung der der SQL Datenbank eine Schicht die sich um die Trennung von DB und Anwendung kümmert? Wie viele User musst du beachten?


    PS: Vielleicht mag ein Mod oder Admin den Teil der Sicherheitsdiskussion abtrennen, so dass der eigentliche Thread wieder übersichtlich wird.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Vielen Dank, an euch alle. :)
    Ich werde in Zukunft einfach meine Bilddateien auf der
    Fesplatte speichern.
    Und den Pfad in die DB eintragen.
    Damit die SQL-Compact DB nicht zu groß wird.
    Da diese nur MAX 4GB Speichern kann.
    Visual Basic.NET 8o
    MS-SQL
    8o