Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos.
Estou trabalhando em uma funcionalidade que requer o envio de um arquivo PDF para o banco de dados. Trabalho com banco MySql e C# no Visual Studio 2010.
A parte de enviar o tal arquivo para o banco já resolvi. Relativamente sem problemas.
O problema agora é pegar o arquivo de volta. Será que alguém poderia dar uma força em como utilizar o OpenFileDialog para tal fim?
Apenas para deixar salvo no fórum para o caso de alguém querer usar depois, abaixo o código para salvar o arquivo no BD.
// Código para pesquisar o arquivo no computador
private void btnPesquisarArquivo_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.InitialDirectory = @"C:\";
dlg.Title = "Selecione o(s) arquivo(s)";
dlg.DefaultExt = "pdf";
dlg.Filter = "PDF Files (*.pdf) | *.pdf|ZIP Files(*.zip)|*.zip";
dlg.CheckPathExists = true;
dlg.CheckFileExists = true;
dlg.Multiselect = false;
dlg.ReadOnlyChecked = true;
if (dlg.ShowDialog() == DialogResult.OK)
{
try
{
txtCaminhoArquivo.Text = dlg.FileName;
arquivoPdf = GetArquivo(txtCaminhoArquivo.Text);
}
catch (Exception ex)
{
MessageBox.Show("Falha ao selecionar o arquivo: " +ex.ToString(), "Falha!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
// Método GetArquivo responsável por converter o PDF em um array de bytes
private byte[] GetArquivo(String caminhoArquivo)
{
FileStream fs = new FileStream(caminhoArquivo, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] arquivo = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
return arquivo;
}
// Evento Click do botão Salvar
private void btnSalvar_Click(object sender, EventArgs e)
{
String msg = "";
Boolean sucesso = false;
try
{
EN_Laudo enLaudo = new EN_Laudo(0, 0, "", arquivoPdf);
bll_Laudo.Incluir(enLaudo, ref sucesso, ref msg);
MessageBox.Show(msg.ToString(), "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show("Falha ao salvar o registro: " + ex.ToString());
}
}
// Como não há regras de negócio, vou colocar direto o método Salvar da classe DAL_Laudo. O método Incluir da classe BLL_Laudo apenas chama o método abaixo
public void Incluir(EN_Laudo en_Laudo)
{
MySqlConnection conn = bd.conexao();
try
{
String sql;
sql = "INSERT INTO laudos (arquivo) VALUES (?arquivo)";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.Add("arquivo", MySqlDbType.LongBlob).Value = en_Laudo.arquivo;
conn.Open();
cmd.ExecuteNonQuery();
}
catch (MySqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
Espero que alguém possa me ajudar com minha dúvida.
Se tiverem dúvida no código acima ficarei feliz em saná-las.
>
Só não entendi por que quer usar o OpenFileDialog para isso. Acho que terá que criar um botão simples para exibir este arquivo.
Abraços...
Bom dia quintelab.
Não sei exatamente como fazer o que estou querendo. Penso em fazer uma DataGridView, sendo que a última coluna será um Button ou LinkLabel, que me permitirá baixar o arquivo referente àquele registro.
Mas não tenho idéia de como fazê-lo, nem se é possível.
Obrigado!
Eu acredito que o OFD seja desnecessário, pois uma vez que você tem seu PDF salvo no BD a unica coisa que você precisa fazer é abrir ele de novo, coisa que você pode fazer apenas programando o próprio DGV para que quando um duplo clique fosse dado na célula do PDF ele exibiria um leitor (Caso você esteja usando o ItextSharp acredito que ele tenha um modulo de leitura do Acrobat) em um form que leria o registro normalmente.
Em outras palavras, você fez a ida, e agora precisa fazer o que ja tinha feito, só que ao contrario.
>
Eu acredito que o OFD seja desnecessário, pois uma vez que você tem seu PDF salvo no BD a unica coisa que você precisa fazer é abrir ele de novo, coisa que você pode fazer apenas programando o próprio DGV para que quando um duplo clique fosse dado na célula do PDF ele exibiria um leitor (Caso você esteja usando o ItextSharp acredito que ele tenha um modulo de leitura do Acrobat) em um form que leria o registro normalmente.
Em outras palavras, você fez a ida, e agora precisa fazer o que ja tinha feito, só que ao contrario.
Entendi a idéia. Vou tentar implementar.
Obs.: o que seria ITextSharp? Oo
iTextSharp é uma biblioteca de funções para .Net que implementa a criação e edição de arquivos PDF, contem alguns componentes de leitura, é bem legal.
Vou te deixar um link aqui e alguns tutoriais:
Só não entendi por que quer usar o OpenFileDialog para isso. Acho que terá que criar um botão simples para exibir este arquivo.
Abraços...