RTF-Datei oder -Text in einer Datenbank speichern

  • VB.NET

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

    RTF-Datei oder -Text in einer Datenbank speichern

    Wie kann ich einen RTF-Text in einer Datenbank speichern?

    Wenn ich den formatierten Text in ein (n)varchar speichere, gehen sämtliche Formatierungen verloren und ich bekomme seltsame Zeichenkombinationen zwischen dem Text reingeworfen.
    @ErfinderDesRades: Glaube es mir oder glaube es mir nicht, es ist so!
    Habe es mehrmals versucht aber ich bekomme statt eines RTF-Textes mit Formatierungen nur den PlainText. (Ich speichere jedesmal die rtb_Export.rtf in die Datenbank und lade die Daten aus der Datenbank direkt in die richtextbox)

    @EaranMaleasi: Es handelt sich um eine Microsoft-SQL-Datenbank. Den Datentyp BLOB finde ich allerdings nicht... Hoffe du kannst mir da irgendwie helfen!?
    Schau mal hier rein:
    databasejournal.com/features/m…-in-SQL-Server-Part-2.htm

    @ErfinderDesRades :
    Leider nicht immer. DBMS haben Engines, und was diese mit einem Text anstellen ist nicht immer gegeben, anders als bei Datentypen.
    Eine auf Latin-1 eingestellte InnoDB Engine(MySQL) wird dir zwar die kyrillischen Zeichen abnehmen, was aber bei nem Select auf diese Zeichen rauskommt kann dir niemand garantieren.
    Das selbe gilt sogar für viele Texteditoren. Allein durch das öffnen und schließen von Dateien (und das versehentliche speichern) können etliche Zeichen verändert worden sein, nur weil der Editor diese nicht verstanden hat.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „EaranMaleasi“ ()

    @ErfinderDesRades:
    Ich habe zum Test folgenden Code geschrieben:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Speichern_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim connection As New SqlClient.SqlConnection
    4. Dim command As New SqlClient.SqlCommand("INSERT INTO test (textinput) VALUES ('" + RichTextBox1.Rtf + "')")
    5. connection.ConnectionString = "xyz" 'entfernt
    6. connection.Open()
    7. command.Connection = connection
    8. command.ExecuteNonQuery()
    9. connection.Close()
    10. End Sub
    11. Private Sub Laden_Click(sender As Object, e As EventArgs) Handles Button2.Click
    12. Dim connection As New SqlClient.SqlConnection
    13. Dim command As New SqlClient.SqlCommand("Select textinput from test where id = 1")
    14. Dim reader As SqlClient.SqlDataReader
    15. connection.ConnectionString = "xyz" 'entfernt
    16. connection.Open()
    17. command.Connection = connection
    18. reader = command.ExecuteReader()
    19. While reader.Read
    20. RichTextBox1.Rtf = reader("textinput")
    21. End While
    22. connection.Close()
    23. End Sub
    24. End Class


    Aus:
    Spoiler anzeigen
    Hallo!
    Dies ist ein Test
    OB es wohl klappt?


    Wird:
    Spoiler anzeigen
    {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}
    {\colortbl ;\red155\green0\blue211;}
    \viewkind4\uc1\pard\sa200\sl276\slmult1\lang7\b\f0\fs22 Hallo!\b0\par
    \i Dies \i0 ist ein \ul Test\par
    \pard\cf1\ulnone OB es wohl klappt?\cf0\lang1031\f1\fs17\par
    }


    @'EaranMaleasi': Danke, das wird mir ein wenig helfen! Sollte ich noch Probleme haben melde ich mich!
    öhm bin ich blind, oder kann ich keine Rtf Eigenschaft vorfinden?
    msdn.microsoft.com/de-de/libra…ichtextbox(v=vs.100).aspx

    Benutzt du andere Controls als die Windows Controls?

    Edit:
    Tatsächlich das falsche Control erwischt,
    Hier nun das richtige, mit Rtf eigenschaft:
    msdn.microsoft.com/de-de/libra…ichtextbox(v=vs.110).aspx

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

    Ich habe in die Form eine RichTextBox geschoben! (findest du in der Toolbox)
    Deren Eigenschaften sind unter anderem .Text und .Rtf

    Mit .Text bekommst du den Text ohne Formatierungen
    Mit .Rtf erhältst du ihn mit

    So steht es bei mir im Buch. Auf der Website finde ich es allerdings auch nicht...

    Wenn du in VB einfach mal testest und dann einfach .Rtf eintippst erscheint es auch in der Liste!
    (Nutze Visual Studio 2015)
    und ich hab nun sowas gecodet:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. RichTextBox1.Rtf =
    3. "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}" &
    4. "{\colortbl ;\red155\green0\blue211;}" &
    5. "\viewkind4\uc1\pard\sa200\sl276\slmult1\lang7\b\f0\fs22 Hallo!\b0\par" &
    6. "\i Dies \i0 ist ein \ul Test\par" &
    7. "\pard\cf1\ulnone OB es wohl klappt?\cf0\lang1031\f1\fs17\par" &
    8. "}"
    9. End Sub

    Ergebnis:

    Also was bei dir als Ergebnis zurückkommt, ist ordentlicher Richtext.


    Aber anderes Problem: Sql-Injection

    Und grad im Richtext können glaub auch Zeichen vorkommen, die der Sql-Parser interpretiert.

    Ach - und noch ein Problem: Visual Studio - Empfohlene Einstellungen

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