Search code examples
xamlrichtextboxxpsflowdocumentvarbinary

How do I save RichTextBox content into SQL varbinary (byte array) column?


I want to save content of a RichTextBox to varbinary (= byte array) in XamlPackage format. I need technicial advise on how to it.

I actually need to know how to convert between FlowDocument to byte array.

Is it even recommended to store it as varbinary, or this is a bad idea?


Update

Code snippet:

///Load
byte[] document = GetDocumentFromDataBase();
RickTextBox tb = new RickTextBox();
TextRange tr = new TextRange(tb.Document.ContentStart, tb.Document.ContentEnd)
tr.Load(--------------------------) //Load from the byte array.


///Save
int maxAllowed = 1024;
byte[] document;
RichTextBox tb = new RichTextBox();
//User entered text and designs in the rich text
TextRange tr = new TextRange(tb.Document.ContentStart, tb.Document.ContentEnd)   
tr.Save(--------------------------) //Save to byte array
if (document.Length > maxAllowed) 
{
    MessageBox.Show((document.Length - maxAllowed) + " Exceeding limit.");
    return;
}
SaveToDataBase();
TextRange

Solution

  • I can't find my full example right now, but you can use XamlReader and XamlWriter to get the document into and out of a string. From there, you can use UnicodeEncoding, AsciiEncoding or whatever encoder you want to get it into and out of bytes.

    My shorter example for setting the document from a string... docReader is my flow document reader

            private void SetDetails(string detailsString)
        {
            if (docReader == null)
                return;
            if (String.IsNullOrEmpty(detailsString))
            {
                this.docReader.Document = null;
                return;
            }
            using (
            StringReader stringReader = new StringReader(detailsString))
            {
                using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(stringReader))
                {
                    this.docReader.Document = XamlReader.Load(reader) as FlowDocument;
                }
            }
        }