COMO ANEXAR DOCUMENTOS EM BANCO DE DADOS SQL
Olá amigos, bom dia.
Sou novo aqui no fórum e esse vai ser meu primeiro tópico. (Caso faça algo de errado por favor me avisem XD)
Comecei a trabalhar com VB.NET na minha empresa a pouco tempo, então não tenho muito conhecimento da linguagem.
Minha dúvida é a seguinte:
Tem como fazer uma aplicação que realmente inclua arquivos de varios formatos( exemplos: .doc, .pdf, .xls, e até, se possivel, umas imagens) em um banco de dados SQL?
Desde já agradeço
Att,
Lucas
Sou novo aqui no fórum e esse vai ser meu primeiro tópico. (Caso faça algo de errado por favor me avisem XD)
Comecei a trabalhar com VB.NET na minha empresa a pouco tempo, então não tenho muito conhecimento da linguagem.
Minha dúvida é a seguinte:
Tem como fazer uma aplicação que realmente inclua arquivos de varios formatos( exemplos: .doc, .pdf, .xls, e até, se possivel, umas imagens) em um banco de dados SQL?
Desde já agradeço
Att,
Lucas
Aqui está o que eu desenvolvi até agora, só que esta dando erro:
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Public Class SalvaImagemBD
Dim Sql As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim arqImg As FileStream
Dim rImg As StreamReader
If Len(txtimg.Text) <> 0 Then
arqImg = New FileStream(txtimg.Text, FileMode.Open, FileAccess.Read, FileShare.Read)
rImg = New StreamReader(arqImg)
Else
MsgBox([Ô]Informe um nome para a imagem que deseja incluir na tabela.[Ô], MsgBoxStyle.Critical, [Ô]Erro[Ô])
Exit Sub
End If
Sql = [Ô]INSERT INTO Imagens(nome,Arquivo) VALUES (@nome,@Arquivo)[Ô]
Dim strConexao As String = My.Settings.UNICOConnectionString
Dim cn As New SqlConnection
cn.ConnectionString = strConexao
Dim cmd As New SqlCommand(Sql, cn)
Try
[ô]declaramos um vetor de bytes para armazenar o conteúdo da imagem a ser salva
Dim arqByteArray(arqImg.Length - 1) As Byte
arqImg.Read(arqByteArray, 0, arqImg.Length)
[ô]inclui os parâmetros
cmd.Parameters.Add(New SqlParameter([Ô]@Arquivo[Ô], arqImg.Length)) [ô]OleDbType.VarChar, 255)).Value = arqImg.Length
cmd.Parameters.Add(New SqlParameter([Ô]@nome[Ô], arqByteArray)) [ô]OleDbType.Binary, arqImg.Length)).Value = arqByteArray
[ô]abre a conexao , executa o comando e fecha a conexao
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
MsgBox([Ô]Imagem incluida com sucesso ![Ô], MsgBoxStyle.Information, [Ô]OK[Ô])
Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.Critical, [Ô]Erro[Ô])
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
OpenFileDialog1.ShowDialog()
txtimg.Text = OpenFileDialog1.FileName
End Sub
End Class
No banco de dados [Ô]Imagens[Ô] eu declarei os ampos [Ô]Arquivo[Ô] e [Ô]nome[Ô] como varbinary(MAX) e varchar(500) respectivamente.
O textfield tem o nome de [Ô]txtimg[Ô] e o restante esta com os nomes default.
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Public Class SalvaImagemBD
Dim Sql As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim arqImg As FileStream
Dim rImg As StreamReader
If Len(txtimg.Text) <> 0 Then
arqImg = New FileStream(txtimg.Text, FileMode.Open, FileAccess.Read, FileShare.Read)
rImg = New StreamReader(arqImg)
Else
MsgBox([Ô]Informe um nome para a imagem que deseja incluir na tabela.[Ô], MsgBoxStyle.Critical, [Ô]Erro[Ô])
Exit Sub
End If
Sql = [Ô]INSERT INTO Imagens(nome,Arquivo) VALUES (@nome,@Arquivo)[Ô]
Dim strConexao As String = My.Settings.UNICOConnectionString
Dim cn As New SqlConnection
cn.ConnectionString = strConexao
Dim cmd As New SqlCommand(Sql, cn)
Try
[ô]declaramos um vetor de bytes para armazenar o conteúdo da imagem a ser salva
Dim arqByteArray(arqImg.Length - 1) As Byte
arqImg.Read(arqByteArray, 0, arqImg.Length)
[ô]inclui os parâmetros
cmd.Parameters.Add(New SqlParameter([Ô]@Arquivo[Ô], arqImg.Length)) [ô]OleDbType.VarChar, 255)).Value = arqImg.Length
cmd.Parameters.Add(New SqlParameter([Ô]@nome[Ô], arqByteArray)) [ô]OleDbType.Binary, arqImg.Length)).Value = arqByteArray
[ô]abre a conexao , executa o comando e fecha a conexao
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
MsgBox([Ô]Imagem incluida com sucesso ![Ô], MsgBoxStyle.Information, [Ô]OK[Ô])
Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.Critical, [Ô]Erro[Ô])
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
OpenFileDialog1.ShowDialog()
txtimg.Text = OpenFileDialog1.FileName
End Sub
End Class
No banco de dados [Ô]Imagens[Ô] eu declarei os ampos [Ô]Arquivo[Ô] e [Ô]nome[Ô] como varbinary(MAX) e varchar(500) respectivamente.
O textfield tem o nome de [Ô]txtimg[Ô] e o restante esta com os nomes default.
Está dando erro onde? Qual erro?
Bom o erro é meio grandinho então eu tirei um print e postei como anexo, OK?
Ta ai.
Ta ai.
Esse erro ocorre ao clicar o button1
Ninguem pode me ajudar nisso?
Ai galera, já consegui inserir no banco com o código abaixo, porem buscar a imagem e mostrar em um picturebox está sendo uma missão impossivel para mim. Alguem pode ajudar?
Shared Sub inserirImagem()
[ô] Define a Connection String
Dim strConexao As String = My.Settings.UNICOConnectionString
Dim cn As New SqlConnection
cn.ConnectionString = strConexao
Try
[ô] Cria um novo FileStream para leitura da imagem
Dim fs As New IO.FileStream([Ô]c:\image.bmp[Ô], IO.FileMode.Open, IO.FileAccess.Read)
[ô] Cria um array de Bytes do tamanho do FileStream
Dim ImageData(fs.Length() - 1) As Byte
[ô] Lê os bytes do FileStream para o array criado
fs.Read(ImageData, 0, ImageData.Length)
[ô] Fecha o FileStream ficando a imagem guardada no array
fs.Close()
Using cn
Dim cSql As String
[ô] Define o commando Transact-SQL para inserir dados
cSql = [Ô]INSERT INTO contacts (name , img) VALUES(@name,@img)[Ô]
Dim cmd As New SqlClient.SqlCommand(cSql, cn)
[ô] Define os parametros para a inserção de dados, onde está o array
[ô] de bytes(imagem) a ser inserida. O tipo do campo é Image
cmd.Parameters.Add([Ô]@name[Ô], SqlDbType.VarChar).Value = [Ô]novaimagem[Ô]
cmd.Parameters.Add([Ô]@img[Ô], SqlDbType.Image).Value = ImageData
cn.Open()
[ô] Insere os campos no SQL
cmd.ExecuteNonQuery()
End Using
MsgBox([Ô]INCLUIDO!![Ô])
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Shared Sub inserirImagem()
[ô] Define a Connection String
Dim strConexao As String = My.Settings.UNICOConnectionString
Dim cn As New SqlConnection
cn.ConnectionString = strConexao
Try
[ô] Cria um novo FileStream para leitura da imagem
Dim fs As New IO.FileStream([Ô]c:\image.bmp[Ô], IO.FileMode.Open, IO.FileAccess.Read)
[ô] Cria um array de Bytes do tamanho do FileStream
Dim ImageData(fs.Length() - 1) As Byte
[ô] Lê os bytes do FileStream para o array criado
fs.Read(ImageData, 0, ImageData.Length)
[ô] Fecha o FileStream ficando a imagem guardada no array
fs.Close()
Using cn
Dim cSql As String
[ô] Define o commando Transact-SQL para inserir dados
cSql = [Ô]INSERT INTO contacts (name , img) VALUES(@name,@img)[Ô]
Dim cmd As New SqlClient.SqlCommand(cSql, cn)
[ô] Define os parametros para a inserção de dados, onde está o array
[ô] de bytes(imagem) a ser inserida. O tipo do campo é Image
cmd.Parameters.Add([Ô]@name[Ô], SqlDbType.VarChar).Value = [Ô]novaimagem[Ô]
cmd.Parameters.Add([Ô]@img[Ô], SqlDbType.Image).Value = ImageData
cn.Open()
[ô] Insere os campos no SQL
cmd.ExecuteNonQuery()
End Using
MsgBox([Ô]INCLUIDO!![Ô])
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Bom, apesar de ninguem se manifestar... consegui que o programa grava-se imagens no banco de dados em formato binário, e já consigo recupera-las e visualiza-las. Agora é questão de adaptar o código para aceitar todos os tipos de documento.
Obrigado mesmo assim.
Att,
Lucas
Obrigado mesmo assim.
Att,
Lucas
Ja resolvi o problema, consigo adicionar todo tipo dearquivo agora.
Tópico fechado.
Tópico fechado.
Tópico encerrado , respostas não são mais permitidas