gravar arquivos em *.pdf no BD e depois disponilizar para download... - C# WindownsFormApllication

27/08/2012

0

preciso criar um meio de gravar arquivos em *.pdf para serem importados para o banco e disponibilizados para os clientes efetuarem o download através de uma aplicação desktop(Windowns Form)
Estou tentando fazer mas so acho exemplos em .asp net, sera que é possivel fazer atraves do windowns form?
alguem tem alguma dica ?


Elisangela Silva

Elisangela Silva

Responder

Post mais votado

28/08/2012

Acho que isso resolve seu problema

Escrevendo no banco de dados
StreamReader oStreamReader = new StreamReader(@"file.pdf");

byte[] buffer = new byte[oStreamReader.BaseStream.Length];

oStreamReader.BaseStream.Read(buffer, 0, buffer.Length);

oStreamReader.Close();
oStreamReader.Dispose();

SqlConnection oSqlConnection = new SqlConnection(@"connectionString");

oSqlConnection.Open();

SqlCommand oSqlCommand = new SqlCommand();

oSqlCommand.Connection = oSqlConnection;
oSqlCommand.CommandText = "INSERT INTO tbArquivo(Arquivo) VALUES(@Arquivo);";
oSqlCommand.CommandType = CommandType.Text;

SqlParameter oSqlParameter = new SqlParameter();

oSqlParameter.ParameterName = "@Arquivo";
oSqlParameter.SqlDbType = SqlDbType.Image;
oSqlParameter.SourceColumn = "Arquivo";
oSqlParameter.Value = buffer;

oSqlCommand.Parameters.Add(oSqlParameter);

oSqlCommand.ExecuteNonQuery();

oSqlConnection.Close();


Lendo do banco de dados
SqlConnection oSqlConnection = new SqlConnection(@"connectionString");

oSqlConnection.Open();

SqlCommand oSqlCommand = new SqlCommand();

oSqlCommand.Connection = oSqlConnection;
oSqlCommand.CommandText = "SELECT Arquivo FROM tbArquivo Where Id = 1;";
oSqlCommand.CommandType = CommandType.Text;

SqlDataReader oSqlDataReader = oSqlCommand.ExecuteReader();

byte[] buffer = null;

if (oSqlDataReader.Read())
{
    buffer = (byte[])oSqlDataReader.GetValue(0);
}

oSqlConnection.Close();

StreamWriter oStreamWriter = new StreamWriter(@"C:\Documents and Settings\emoliveira\Desktop\Copy_file.pdf");

oStreamWriter.BaseStream.Write(buffer, 0, buffer.Length);

oStreamWriter.Close();
oStreamWriter.Dispose();

Edson Oliveira

Edson Oliveira
Responder

Mais Posts

27/08/2012

Pjava

Posso estar enganado, mas é uma gravação normal, como qualquer outro tipo de campo. Um simples insert. O que deve ser levado em consideração é o tipo no BD, que deve ser um tipo BLOB. Esse artigo pode te ser útil, acho.

http://www.macoratti.net/08/11/asp_blobs.htm
Responder

29/08/2012

Elisangela Silva

Posso estar enganado, mas é uma gravação normal, como qualquer outro tipo de campo. Um simples insert. O que deve ser levado em consideração é o tipo no BD, que deve ser um tipo BLOB. Esse artigo pode te ser útil, acho.

http://www.macoratti.net/08/11/asp_blobs.htm


ok
Muito obrigada de coração viu! Que Deus ilumine sempre a sua vida

Responder

29/08/2012

Elisangela Silva

Acho que isso resolve seu problema

Escrevendo no banco de dados
StreamReader oStreamReader = new StreamReader(@"file.pdf");

byte[] buffer = new byte[oStreamReader.BaseStream.Length];

oStreamReader.BaseStream.Read(buffer, 0, buffer.Length);

oStreamReader.Close();
oStreamReader.Dispose();

SqlConnection oSqlConnection = new SqlConnection(@"connectionString");

oSqlConnection.Open();

SqlCommand oSqlCommand = new SqlCommand();

oSqlCommand.Connection = oSqlConnection;
oSqlCommand.CommandText = "INSERT INTO tbArquivo(Arquivo) VALUES(@Arquivo);";
oSqlCommand.CommandType = CommandType.Text;

SqlParameter oSqlParameter = new SqlParameter();

oSqlParameter.ParameterName = "@Arquivo";
oSqlParameter.SqlDbType = SqlDbType.Image;
oSqlParameter.SourceColumn = "Arquivo";
oSqlParameter.Value = buffer;

oSqlCommand.Parameters.Add(oSqlParameter);

oSqlCommand.ExecuteNonQuery();

oSqlConnection.Close();


Lendo do banco de dados
[code]
SqlConnection oSqlConnection = new SqlConnection(@"connectionString");

oSqlConnection.Open();

SqlCommand oSqlCommand = new SqlCommand();

oSqlCommand.Connection = oSqlConnection;
oSqlCommand.CommandText = "SELECT Arquivo FROM tbArquivo Where Id = 1;";
oSqlCommand.CommandType = CommandType.Text;

SqlDataReader oSqlDataReader = oSqlCommand.ExecuteReader();

byte[] buffer = null;

if (oSqlDataReader.Read())
{
buffer = (byte[])oSqlDataReader.GetValue(0);
}

oSqlConnection.Close();

StreamWriter oStreamWriter = new StreamWriter(@"C:\Documents and Settings\emoliveira\Desktop\Copy_file.pdf");

oStreamWriter.BaseStream.Write(buffer, 0, buffer.Length);

oStreamWriter.Close();
oStreamWriter.Dispose();


Ola Amigo Muito obrigada de coração viu! Que Deus ilumine sempre a sua vida
Ao executar o codigo deu um pequenino erro sera que vc poderia me ajudar mais essa vez?
O erro acontece ao abrir o arquivo do bd:
da uma mensagem assim...
O Adobe Reader não põde abrir 'Copy_file.pdf' porque não ha suporte a esse
tipo de arquivo ou ele foi danificado(por exemplo, foi enviado como anexo de e mail
e não foi codificado corretamente)


Responder

29/08/2012

Edson Oliveira

Mas vc trocou esses pedaços de código.

file.pdf // Aqui vc tem que colocar o caminho de algum arquivo .pdf
connectionString //string de conexão.
C:\Documents and Settings\emoliveira\Desktop\Copy_file.pdf //aonde vc que salvar o arquivo.

Verifica se o arquivo que vc está lendo, está abrindo e depois tem executar de novo ser código.

Como vc está fazendo o seu programa, aonde vc está lendo o arquivo?
Responder

29/08/2012

Elisangela Silva

Mas vc trocou esses pedaços de código.

file.pdf // Aqui vc tem que colocar o caminho de algum arquivo .pdf
connectionString //string de conexão.
C:\Documents and Settings\emoliveira\Desktop\Copy_file.pdf //aonde vc que salvar o arquivo.

Verifica se o arquivo que vc está lendo, está abrindo e depois tem executar de novo ser código.

Como vc está fazendo o seu programa, aonde vc está lendo o arquivo?


Ola mais uma vez agradeço a ajuda
Quanto ao codigo
em file.pdf eu coloquei a string lida atraves do fileDialog
String caminho = openFileDialog1.FileName;
StreamReader oStreamReader = new StreamReader(caminho);

Quanto salvar o arquivo eu coloquei
StreamWriter oStreamWriter = new StreamWriter(@"C:\Users\Particular\Desktop\Copy_file.pdf");


Elisangela


Responder

29/08/2012

Elisangela Silva

Mas vc trocou esses pedaços de código.

file.pdf // Aqui vc tem que colocar o caminho de algum arquivo .pdf
connectionString //string de conexão.
C:\Documents and Settings\emoliveira\Desktop\Copy_file.pdf //aonde vc que salvar o arquivo.

Verifica se o arquivo que vc está lendo, está abrindo e depois tem executar de novo ser código.

Como vc está fazendo o seu programa, aonde vc está lendo o arquivo?



Problrma resolvido

O codigo que vc postou ta coretissimo o meu arquivo pdf que tava corrompido,
dai eu resolvi fazer o teste com outros arquivos pdf e ai sim deu certo

Muito obrigada de coração viu! Que Deus ilumine sempre a sua vida.
Responder

29/08/2012

Edson Oliveira

De nada.

Até mais
Responder

03/11/2019

Edvaldo Silva

Boa Noite! Parabéns pelo artigo!
Estou com um problema para exibir arquivos em PDF, Via asp.net utilizando c#
Consigo gravar perfeitamente no banco de dados, porém a leitura do arquivo em PDF não funciona.
Quando tento ler o arquivo gera este erro abaixo, é como se o sistema estivesse tentando executar um executável do windows.
Estou gravando os arquivos no banco de dados por motivo de segurança, porém não é este o caso, porque quando é no formato de imagem a mesma é exibida normalmente no gridview. Eu queria que os arquivos em PDF, fossem baixados para máquina do usuário ou que abrissem no navegador normalmente.

Desde já agradeço.

System.ComponentModel.Win32Exception: Access is denied.


PARTE DO CÓDIGO QUE UTILIZO PARA LER O ARQUIVO

imagemdoc.ImageUrl = null;
Hashtable parametro = new Hashtable();
DataSet dtimagem = new DataSet();
MysqlConecta obj = new MysqlConecta();
parametro.Clear();
parametro.Add("@id", GridDocumentos.SelectedDataKey.Value);
dtimagem = obj.MyDadosDataset("select * from CLIENTEDOCUMENTACAO where IDDOCUMENTACAO =@id ", connectionString, parametro);
GridDocumentos.UseAccessibleHeader = false;
GridDocumentos.HeaderRow.TableSection = TableRowSection.TableHeader;
if (dtimagem != null)
{
string aux = dtimagem.Tables[0].Rows[0]["EXTESAO"].ToString().ToUpper().Trim();
byte[] bytes = (byte[])dtimagem.Tables[0].Rows[0]["IMAGEMDOCUMENTO"];
string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
string url = "data:image/png;base64," + base64String;
imagemdoc.ImageUrl = url;

int indice = aux.IndexOf("PDF");

btnexcluiarquivo.Visible = true;
if (indice >= 0)
{

var nomeArquivo = url;
var arquivoTemp = Path.GetTempFileName();
arquivoTemp = Path.ChangeExtension(arquivoTemp, Path.GetExtension(nomeArquivo));
File.WriteAllBytes(arquivoTemp, bytes);
Process.Start(arquivoTemp);


}
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar