Domanda

Ho qualche difficoltà a caricare il file dalla memoria Stream per database (è visibile nel DB come 0x quindi credo che non viene salvato correttamente). Non sono sicuro che si tratti di un problema con il flusso in fase di creazione o salvare su db dal flusso dovrebbe essere fatto in modo diverso.

private void test {
        byte[] storage = new byte[500000];
        using (MemoryStream stream = new MemoryStream(storage))
        DocX documentWord = DocX.Create(stream);
        // some stuff
        documentWord.Save(); 
        databaseFilePut(stream);
}


public static void databaseFilePut(MemoryStream stream) {
        byte[] file;
        using (var reader = new BinaryReader(stream)) {
                file = reader.ReadBytes((int) stream.Length);
               // reader.Close();
        }
            //stream.Close();
        //}
        using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP))
        using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) {
            sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
            sqlWrite.ExecuteNonQuery();
        }
    }

Che cosa sto facendo di sbagliato? Sto usando Docx biblioteca CodePlex.

È stato utile?

Soluzione

Stai scrivendo al torrente e poi subito cercando di leggere da esso senza riavvolgimento ... quindi non ci sono dati da leggere.

Per fortuna, c'è un modo molto semplice di semplificare il codice in ogni caso:

byte[] file = stream.ToArray();

Tuttavia, hai un altro potenziale problema:

byte[] storage = new byte[500000];
using (MemoryStream stream = new MemoryStream(storage))
...

Questo renderà il MemoryStream hanno un fisso dimensioni di 500K - né più, né meno. Ho il sospetto che non è ciò che si vuole; Vi suggerisco di sbarazzarsi della variabile storage e basta chiamare il costruttore senza parametri MemoryStream.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top