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

27/08/2012

32

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 ?


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