Salvare un documento in DB access in progetto ASP.NET

  • Creatore Discussione Creatore Discussione jackil
  • Data di inizio Data di inizio

jackil

Nuovo Utente
30 Ott 2006
15
0
0
Ho cercato per settimane qualcosa che mi spiegasse come è possibile salvare all'interno di un db access, un qualsiasi documento (txt, word, excell, etc.), attraverso il codice vb.net, e non ho trovato niente sia su applicazioni vb tradizionali ne da una applicazione asp.net, ... spero che qualche buon'anima mi possa dare una mano...
Grazie anticipatamente.
Val.
 
Dovresti provare a salvare il file in un MemoryStream, e poi passarlo nella query ad un campo "Oggetto OLE" di Access. Ti premetto che non l'ho mai fatto su Access, ma solo su SQL, e so per certo che funziona anche su Oracle...

Se poi non sai più dove andare a sbattere la testa, ti consiglio di salvare solo il path del file in un campo testo... Ma forse la tua esigenza non prevede questa soluzione... :confused:

:byebye:
 
Grazie ....

purtroppo la mia scarsa esperienza con vb.net e asp non mi permettono di comprendere bene:
1) cos'è un MemoryStream, un oggetto asp.net o vb.net o una proprietà di qualcosa?
2) quando mi parli della query intendi in un comando "UPDATE", con la specifica della path del file?
Grazie mille dell'interessamento!!!!!!
jackil.
 
Ciao scusa,

MemoryStream è un oggetto per gestire uno stream (appunto) di dati, che può essere caricato da un file presente su disco, per il db invece, sì UPDATE o INSERT che sia, ma il contenuto di MemoryStream lo devi passare come array di byte (byte[]), come se passassi una normalissima stringa in un campo testo...

Se hai bisogno di un po' di codice di prova fammi sapere che cerco qualcosa fra i miei progetti...

:byebye:
 
Grazie mille artcava...

....mi faresti un favore se mi inviassi qualche script o anche un link a pagine sull'argomento..... non so proprio di cosa stiamo parlando... nel senso che non sò come si passa un array di dati in un comando update o insert!!!!!
Grazie mille per l'interessamento... appena posso devo visitare il tuo sito!!!!!
Jackil.
 
Questa la funzione che uso io, è in C#, ma se ti serve in VB ci metti un attimo...

Codice:
        /// <summary>
        /// Converte un file partendo dal suo path in un Array di bytes. Utile al salvataggio nel DB.
        /// </summary>
        /// <param name="FileName">Il percorso del File</param>
        /// <param name="FileConverted">Il file convertito</param>
        /// <returns>True se il file viene convertiro, False altrimenti</returns>
        public static bool ConvertFileToByteArray(string FileName, out byte[] FileConverted)
        {
            FileConverted = null;

            if(!File.Exists(FileName))
                return false;

            FileStream fs = null;

            try
            {
                fs = new FileStream(FileName, FileMode.Open);
                FileInfo fi = new FileInfo(FileName);
                long temp = fi.Length;
                int length = Convert.ToInt32(temp);
                FileConverted = new byte[length];
                fs.Read(FileConverted, 0, length);
                fs.Close();
                return true;
            }
            catch(Exception ex)
            {
                Global.Log.Write(LogSeverity.Critical, "Global", "ConvertFileToByteArray", ex.Message);
                return false;
            }
        }

All'uscita dalla funzione prendi FileConverted e lo metti in una query del tipo...

Codice:
"UPDATE tabella SET OLEObjectField = " + FileConverted + " WHERE... "

Spero possa bastare...

:byebye:
 
Certo che può bastare!!!!!

Cavolo se può bastare!!!! Grazie mille!!!!
Come potrò sdebitarmi?????
...a presto, Jackil.
 
Anche 6 caffè!...

io abito in Valdarno, vicino a firenze: quando passi da queste parti sarebbe per me un onore e piacere!...
Non vorrei sembrare tropp"approfittatore", ma per concludere l'argomento avrei un'ultima domanda: se io volessi estrarre il documento dal db access e metterlo a disposizione dell'utilizzatore ad esempio attraverso una textbox per .rtf o altro (es. l'applicazione con la quale è stato realizzato: word) dovrei sempre usare lo Stream memory o comunque estrarre il file come array di byte? .... tutto questo a a che fare con l'upload dei file?
Ancora grazie!
Jackil.
 
Rieccomi...

Sì, devi riprendere il file come Byte[], più o meno così:

Codice:
protected void Page_Load(object sender, EventArgs e)
{
    'Qui fai la connessione etc...
    Response.ContentType = "Application/unknown";
    Response.AddHeader("content-disposition", "attachment; filename=" + Recordset("FileName"));
    Response.BinaryWrite(Recordset("OLEObjectField"));
    Response.End();
}

Ti costruisci una pagina che nel code behind carica il file e lo sputa fuori...

Allora a presto!
:byebye:
 
Adesso i caffè sono 12! Grazie, Grazie, Grazie, Grazie!!!!!!!!!!!!!!!

Grazie art (ti dispiace il riduttivo?), oggi e stasera proverò il tutto......Buon week-end!
Jackil.
 
Funziona Anche Con Access!

Ciao Art, ho provato lo script e il tutto funziona anche in access! Naturalmente l'ho tradotto in vb.net, cosa veramente banale. Unica cosa è che aprendo il db con access non posso aprire il documento che ho salvato, ma non è un problema: tanto lo riapro usando filestrem e con il metodo write salvo il file...
Una domanda: nella casella degli strumenti di vs.net, non ho (nei progetti asp.net), gli oggetti dialogbox: è normale perchè nei progetti asp.net non si possono usare le finestre predefinite (salva, open, etc.) oppure devo impostare dei riferimenti?
A presto.

Jackil
 
Sì, nel campo del DB Access utilizzato vengono inseriti i Bytes, e quindi è impossibile vederli come normali file, se prima non vengono estratti...

Per il componente dialogbox, probabilmente devi solo aggiungere il riferimento all'assembly giusto, ma non te ne faresti comunque niente in ambiente web, se lo scopo è permettere all'utente di caricare il file dalle tue pagine devi usare il controllo FileUpload che fa tutto da solo, ed è in grado di richiamare l'API sul client dell'utente che fa aprire la Dialog...

Non puoi però fare il contrario, poiché il file quando fai il download proviene dalla rete internet, e la Dialog non è fatta per questo tipo di trasmissioni...

Devi usare il Response.AddHeader come ti ho postato un po' di messaggi fa'...

:byebye:
 
Grazie art, adesso credo sia tutto chiaro....

.....e con tutti i caffè che ti devo potresti rischiare un bell'esaurimento nervoso!
Grazie ancora, a presto.

jackil.
 

Discussioni simili