[2008 Express] Salvare un file RTF

mercoledì 26 maggio 2010 - 20.57

alexmed Profilo | Guru

Ciao a tutti.
Vorrei un consiglio su come impostare una colonna per ospitare un file RTF.
Per ora ho impostato una colonna nvarchar(MAX) ma perdo qualsiasi tipo di formattazione.

In giro per la rete ho trovato sorgenti che formattano il testo in HTML ma niente che faccia il contrario.

Per info:
Il file viene elaborato e visualizzato tramite un controllo RichTextBox (VB.NET)

Ciao

alexmed

lbenaglia Profilo | Guru

>Vorrei un consiglio su come impostare una colonna per ospitare
>un file RTF.
>Per ora ho impostato una colonna nvarchar(MAX) ma perdo qualsiasi
>tipo di formattazione.

Ciao,

Hai provato con varbinary(max)?
Questo esempio si riferisce ad una immagine jpeg ma può essere applicato a qualunque tipologia di file:
http://blogs.dotnethell.it/lorenzo/Come-importare-una-foto-in-SQL-Server-2005__5869.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alexmed Profilo | Guru

Ciao Lorenzo,
Ieri sera ho provato ed effettivamente è una soluzione da adottare visto che in futuro vari tipi di dati, come image, saranno esclusi.
Ma, mea culpa, io vorrei salvare nel record il testo proveniente da un controllo RichTexBox e non il file.
In sintesi le operazioni che vorrei eseguire:
1. Apro il un file modello rtf e lo visualizzo nel RichTexBox;
2. Lo modifico e applicando i vari stili (grassetto o colore) al testo;
3. Salvo il testo nel record;

La soluzione che mi hai proposto dovrebbe prevedere due passaggi in più, ovvero quella di salvare il file con nome, caricarlo nel db e poi cancellarlo ma a questo punto sarebbe una soluzione anche quella di salvare nel db il percorso del file.

alexmed

lbenaglia Profilo | Guru

>In sintesi le operazioni che vorrei eseguire:
>1. Apro il un file modello rtf e lo visualizzo nel RichTexBox;
>2. Lo modifico e applicando i vari stili (grassetto o colore)
>al testo;
>3. Salvo il testo nel record;

Si, ma attributi come colore e grassetto non sono testo, quindi mi aspetto che non vengano salvati se si utilizza un datatype stringa.
Hai provato semplicemente a modificare il data type della colonna a varbinary(max) e del codice lato client che la mappa al controllo RTB?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alexmed Profilo | Guru

Si ho provato.
In fase di SELECT nel RTB mi visualizza: Matrice Byte[] (nel record è ancora memorizzato il testo che avevo importato quando la colonna era di tipo nvarchar(max)).
Quando adesso vado ad impostare la query di inserimento

Me.DocumentiTableAdapter.InsertDocumento(PraticaIDTextBox.Text, DataDateTimePicker.Value, OggettoTextBox.Text, DocumentoRichTextBoxPrintCtrl.Text)

Mi dice: Errore 1 Impossibile convertire il valore di tipo 'String' in 'Matrice a 1 dimensioni di Byte.' in DocumentoRichTextBoxPrintCtrl.Text.

alexmed

alexmed Profilo | Guru

Chi cerca trova!
Quando lo salvo nella Tabella (tipo nvarchar(max)) gli dò in pasto l'RTF (RichTextBox.Rtf) e quando lo collego al controllo per il Binding come propertyName gli ridò "Rtf" (ed è qui che mi fregava perchè di Default mi metteva Text).

Era piuttosto semplice!

Grazie molte comunque.

Ciao

alexmed

alexmed Profilo | Guru

Ciao Lorenzo,
Stavo riguardanto la tua procedura (Come importare una foto in SQL Server 2005) e mi stavo cimentando a trasformarla in una Stored Procedure.
Ma esiste un modo dinamico per passargli il percorso del file?

alexmed

lbenaglia Profilo | Guru

>Ma esiste un modo dinamico per passargli il percorso del file?
La funzione OPENROWSET non è parametrica, pertanto l'unico modo è quello di ricorrere al dynamic SQL.
Occhio che per eseguire lo statement e ritornare al chiamante il BLOB, dovrai ricorrere alla sp_executesql specificando opportunamente il parametro di output.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alexmed Profilo | Guru

Avrei risolto così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Tramite VB dove imgFileName è il nome ed il percorso dell'immagine che gli passo con un OpenFileDialog.


alexmed

lbenaglia Profilo | Guru

>Avrei risolto così:
OK, non hai scritto una stored procedure e componi il comando SQL lato client
Occhio a potenziali attacchi di SQL Injection:
http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

roa Profilo | Newbie

Ho lo stesso problema, ma non ho capito "dove" devo definire la propertyName rtf.
Ho un campo sql varchar(max) in sql 2008 r2 express
ho creato una applicazione in VB.net 2010 con un form che contiene un dataset.
ho trascinato il campo (definito come "rich text box") sul form.
Il testo formattato non viene memorizzato.
Sono un principiante e vorrei una dettaglio della tua soluzione.
Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5