COMO ANEXAR DOCUMENTOS EM BANCO DE DADOS SQL

LUCASVAZ 04/10/2011 09:37:35
#385853
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



LUCASVAZ 04/10/2011 11:53:09
#385904
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.
KERPLUNK 04/10/2011 12:00:09
#385906
Está dando erro onde? Qual erro?
LUCASVAZ 04/10/2011 12:16:15
#385911
Bom o erro é meio grandinho então eu tirei um print e postei como anexo, OK?

Ta ai.
LUCASVAZ 04/10/2011 13:38:25
#385929
Esse erro ocorre ao clicar o button1
LUCASVAZ 05/10/2011 08:31:45
#385997
Ninguem pode me ajudar nisso?
LUCASVAZ 05/10/2011 15:52:30
#386029
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
LUCASVAZ 06/10/2011 15:01:34
#386113
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
LUCASVAZ 07/10/2011 10:03:22
#386174
Ja resolvi o problema, consigo adicionar todo tipo dearquivo agora.

Tópico fechado.
Tópico encerrado , respostas não são mais permitidas