Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

allegati in sql server

319 views
Skip to first unread message

fabiocolom...@discussions.microsoft.com

unread,
Feb 16, 2007, 4:50:02 AM2/16/07
to
buongiorno.
Ho la necessità di avere nel mio db in sql server 1 tabella dove allegare i
file pdf, excel, word, immagini,....
Ho visto che esiste il tipo dato image e binary....1 o l'altro va bene
comunque?

Sono al primo approccio a questa problematica, sono 2 giorni che navigo e
consulto codici ma non ne vengo a capo.Tutti gli esempi sono in c# ma non
riesco a capire.Ho trovato 1 paio di esempi ma mi vanno in errore
(outofmemory).
E tra l'altro non ho capito bene nemmeno FileStream e...un po tutto!
Avete qualche info o link con codice in vb.net?
Mi è tutto molto oscuro purtoppo!!!
grazie!
ciao Fabio

fabiocolom...@discussions.microsoft.com

unread,
Feb 16, 2007, 8:48:13 AM2/16/07
to
...diciamo che sono riuscito nell'intento....ho trovato 1 esempio che usava
picturebox per visualizzare il file (immagine) inserito nella tabella del db.
Ma se inserisco 1 pdf o word o excel o file di testo come faccio a
visualizzarlo/farlo vedere all'utente?
Lo devo passare a qualche controllo della form?


"fabio....@parcol.com" ha scritto:

Alessandro Andreose'

unread,
Feb 18, 2007, 2:43:07 PM2/18/07
to
Per aprire un file (txt, pdf, ppt, ecc) puoi usare la classe
System.Diagnostics.Process e il metodo Start.

Sub Main()

Process.Start("pippo.txt")

Process.Start("pippo.pdf")

End Sub

Questo codice apre il file pippo.txt usando notepad e pippo.pdf usando
acrobat reader.

Ciao
Alex

"fabio....@parcol.com" <fabiocolom...@discussions.microsoft.com>
ha scritto nel messaggio
news:3BAA9BE0-1C8E-4198...@microsoft.com...

fabiocolom...@discussions.microsoft.com

unread,
Feb 19, 2007, 4:16:11 AM2/19/07
to
Grazie!
Però non riesco ancora a visualizzare il file e cioè il mio codice d'esempio
è il seguente :

Dim cn As New SqlConnection(strCn)
Dim cmd As New SqlCommand("SELECT immagine FROM table1", cn)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds, "table1")
Dim c As Integer = ds.Tables("table1").Rows.Count
If c > 0 Then
Dim bytBLOBData() As Byte = _
ds.Tables("table1").Rows(c - 1)("immagine")
Dim stmBLOBData As New MemoryStream(bytBLOBData)

A questo punto cosa dovrei scrivere?
ho provato proccess.start(stmBLOBData) ma non funziona!

Mi sembra d'aver capito che per leggere il campo image del campo della
tabella devo usare quanto scritto sopra (sinceramente non ho capito molto ma
diciamo che funziona;process.start con 1 file e la sua path funziona; ma nel
mio caso che leggo il file pdf oxls o doc dal campo di 1 db come dovrei
fare???)

PS: son tutte cse nuove x me....abbi un po di pazienza!
GRAZIE!
Fabio

"Alessandro Andreose'" ha scritto:

Alessandro Andreose'

unread,
Feb 19, 2007, 7:59:50 PM2/19/07
to
news:32EF2A8E-6DA0-4D01...@microsoft.com...
> Grazie!
> Perň non riesco ancora a visualizzare il file e cioč il mio codice
> d'esempio
> č il seguente :

>
> Dim cn As New SqlConnection(strCn)
> Dim cmd As New SqlCommand("SELECT immagine FROM table1", cn)
> Dim da As New SqlDataAdapter(cmd)
> Dim ds As New DataSet()
> da.Fill(ds, "table1")
> Dim c As Integer = ds.Tables("table1").Rows.Count
> If c > 0 Then
> Dim bytBLOBData() As Byte = _
> ds.Tables("table1").Rows(c - 1)("immagine")
> Dim stmBLOBData As New MemoryStream(bytBLOBData)
>
> A questo punto cosa dovrei scrivere?
> ho provato proccess.start(stmBLOBData) ma non funziona!
>
> Mi sembra d'aver capito che per leggere il campo image del campo della
> tabella devo usare quanto scritto sopra (sinceramente non ho capito molto
> ma
> diciamo che funziona;process.start con 1 file e la sua path funziona; ma
> nel
> mio caso che leggo il file pdf oxls o doc dal campo di 1 db come dovrei
> fare???)

Senza creare il MemoryStream potresti provare a salvare l'array di byte in
un file su disco nella forma "nome.estensione" e poi usare Process.Start sul
file.
Una cosa del genere (non l'ho provata, spero funzioni :))

File.Delete("pippo.jpg")


Dim fs As New FileStream("pippo.jpg", FileMode.CreateNew, FileAccess.Write,
FileShare.None)

fs.Write(bytBLOBData, 0, bytBLOBData.Length)

Process.Start("pippo.jpg")


>
> PS: son tutte cse nuove x me....abbi un po di pazienza!
> GRAZIE!

Prego

Ciao Alex

Mauro Servienti [MVP]

unread,
Feb 20, 2007, 1:24:27 AM2/20/07
to
Ciao fabio....@parcol.com,

You wrote :


> Grazie!
> Però non riesco ancora a visualizzare il file e cioè il mio codice d'esempio
> è il seguente :
>
> Dim cn As New SqlConnection(strCn)
> Dim cmd As New SqlCommand("SELECT immagine FROM table1", cn)
> Dim da As New SqlDataAdapter(cmd)
> Dim ds As New DataSet()
> da.Fill(ds, "table1")
> Dim c As Integer = ds.Tables("table1").Rows.Count
> If c > 0 Then
> Dim bytBLOBData() As Byte = _
> ds.Tables("table1").Rows(c - 1)("immagine")
> Dim stmBLOBData As New MemoryStream(bytBLOBData)
>
> A questo punto cosa dovrei scrivere?
> ho provato proccess.start(stmBLOBData) ma non funziona!
>

è uno dei grossi limiti dell'avere i file su db, ci sono pro e contro
in questa soluzione.
Devi necessariamente appoggiarti ad un file temporaneo. Il problema è
che non è detto che tu possa poi cancellarlo.
Un caso è quello di Acrobat, una volta laciato acrobat quando l'utente
chiude il dcoumento Acrobat non si chiude, per velocizzare la prossima
esecuzione... (pietoso) quindi tu non saprai mai che l'esecuzione è
terminata e il tuo file temporaneo non potrà essere cancellato

Quindi al posto di un memory stream usa un file stream, scrivi su disco
e poi con process.start lanci quel file

HTH

--
Mauro Servienti
Microsoft MVP - Visual C# / MCP
--------------------------------------------------
21 Febbraio - Microsoft, Segrate (MI)
Evento: Visual Studio for DB Pro
http://www.microsoft.com/italy/msdn/risorsemsdn/eventi/team_ws.mspx


fabiocolom...@discussions.microsoft.com

unread,
Feb 20, 2007, 5:01:13 AM2/20/07
to
Il tuo codice funziona.
Ho dovuto solo aggiungere
fs.Close() prima di process.start altrimenti mi diceva che il processo era
già utilizzato da 1 altro processo.
un GRAZIE davvero grande!
ciao
Fabio

"Alessandro Andreose'" ha scritto:

> "fabio....@parcol.com" <fabiocolom...@discussions.microsoft.com>

> ha scritto nel messaggio
> news:32EF2A8E-6DA0-4D01...@microsoft.com...
> > Grazie!

> > Però non riesco ancora a visualizzare il file e cioè il mio codice
> > d'esempio
> > è il seguente :

Alessandro Andreose'

unread,
Feb 20, 2007, 7:04:35 AM2/20/07
to
news:A72EA838-4CB7-499B...@microsoft.com...

> Il tuo codice funziona.
> Ho dovuto solo aggiungere
> fs.Close() prima di process.start altrimenti mi diceva che il processo era
> già utilizzato da 1 altro processo.
> un GRAZIE davvero grande!

prego
> ciao
> Fabio

ciao

0 new messages