Pergunta

Tenho alguns problemas para fazer upload de arquivo do fluxo de memória para o banco de dados (é visível em db como 0x, então acho que não é salvo corretamente). Não tenho certeza se é um problema com o fluxo criado ou salvar em dB do fluxo deve ser feito de maneira diferente.

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();
        }
    }

O que estou fazendo errado? Estou usando a biblioteca Docx CodePlex.

Foi útil?

Solução

Você está escrevendo para o fluxo e depois imediatamente tentando ler dele sem retroceder... Portanto, não há dados para ler.

Felizmente, há uma maneira muito fácil de simplificar o código de qualquer maneira:

byte[] file = stream.ToArray();

No entanto, você tem outro problema em potencial:

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

Isso fará o MemoryStream tenha um fixo Tamanho de 500k - não mais, nada menos. Eu suspeito que não é isso que você quer; Eu sugiro que você se livre do storage variável e basta chamar de parâmetros MemoryStream construtor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top