Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ilano

Gravar arquivos em banco de dados SQL Server

Recommended Posts

Olá pessoal,


Estou tentando gravar arquivos em banco de dados mas, ao fazer o download, até baixa, mas quando tento abrir dá erro. Se for um arquivo texto, o arquivo fica vazio, se for imagem não abre, se for zip dá erro ao descompactar, enfim, não está guardando o arquivo corretamente. Disponibilizo aqui todo o código.


O banco é SQL Server 2008 R2 e o tipo de campo para guardar os arquivos é um varbinary(MAX).


Objeto:



Imports System.Data.SqlClient

Namespace MDI

Public Class objProdutosImagem

Private Db As classDatabase.DbSql
Private Cm As SqlCommand
Private Fn As New Funcoes.classFuncao
' Declaracao das variaveis

Private vlCodigo As Integer
Private vlProduto As Integer
Private vlTitulo As String
Private vlNome As String
Private vlImagem As Byte()
Private vlTipo As String
Private vlTamanho As Integer
Private vlComentario As String

Property Codigo()
Get
Return vlCodigo
End Get
Set(ByVal Value)
vlCodigo = Value
End Set
End Property

Property Produto()
Get
Return vlProduto
End Get
Set(ByVal Value)
vlProduto = Value
End Set
End Property

Property Titulo()
Get
Return vlTitulo
End Get
Set(ByVal Value)
vlTitulo = Value
End Set
End Property

Property Nome()
Get
Return vlNome
End Get
Set(ByVal Value)
vlNome = Value
End Set
End Property

Property Imagem()
Get
Return vlImagem
End Get
Set(ByVal Value)
vlImagem = Value
End Set
End Property

Property Tipo()
Get
Return vlTipo
End Get
Set(ByVal Value)
vlTipo = Value
End Set
End Property

Property Tamanho()
Get
Return vlTamanho
End Get
Set(ByVal Value)
vlTamanho = Value
End Set
End Property

Property Comentario()
Get
Return vlComentario
End Get
Set(ByVal Value)
vlComentario = Value
End Set
End Property

' Declaracao dos procedimentos
Public Function Inserir()
Try
Cm = New SqlCommand
' Gera o código
Db = New classDatabase.DbSql
Db.NomeTabela = "C003_PRODUTOSIMAGEM"
vlCodigo = Db.Chave("PImagem_ID")
Db = Nothing
With Cm.Parameters
.AddWithValue("@PImagem_ID", vlCodigo)
.AddWithValue("@Produto_ID", vlProduto)
.AddWithValue("@PImagem_Titulo", Trim(vlTitulo))
.AddWithValue("@PImagem_Nome", Trim(vlNome))
.AddWithValue("@PImagem_Imagem", vlImagem)
.AddWithValue("@PImagem_Tipo", Trim(vlTipo))
.AddWithValue("@PImagem_Tamanho", vlTamanho)
If Trim(vlComentario) <> "" Then .AddWithValue("@PImagem_Comentario", Trim(vlComentario)) Else .AddWithValue("@PImagem_Comentario", DBNull.Value)
End With

If Busca(" Produto_ID = " & vlProduto & " AND PImagem_Nome = '" & Trim(vlNome) & "' ") Then
Return "Registro já cadastrado!"
Else
' Cria uma instância do objeto de conexao com o banco de dados
' e preenche os dados necessarios para realizar as operacoes
Db = New classDatabase.DbSql
Db.NomeTabela = "C003_PRODUTOSIMAGEM"
Return Db.Salvar(Cm)
End If

Catch ex As Exception
Return "Ocorreu um erro ao tentar incluir um novo registro: " & ex.Message
Finally
Cm = Nothing
Db = Nothing
End Try

End Function

Public Function Alterar() As String
Try
Cm = New SqlCommand

With Cm.Parameters
.AddWithValue("@Produto_ID", vlProduto)
.AddWithValue("@PImagem_Titulo", Trim(vlTitulo))
.AddWithValue("@PImagem_Nome", Trim(vlNome))
.AddWithValue("@PImagem_Imagem", vlImagem)
.AddWithValue("@PImagem_Tipo", Trim(vlTipo))
.AddWithValue("@PImagem_Tamanho", vlTamanho)
If Trim(vlComentario) <> "" Then .AddWithValue("@PImagem_Comentario", Trim(vlComentario)) Else .AddWithValue("@PImagem_Comentario", DBNull.Value)
End With

If Busca(" PImagem_ID <> " & vlCodigo & " AND Produto_ID = " & vlProduto & " AND PImagem_Nome = '" & Trim(vlNome) & "' ") Then
Return "Registro já cadastrado!"
Else
' Cria uma instância do objeto de conexao com o banco de dados
' e preenche os dados necessarios para realizar as operacoes
Db = New classDatabase.DbSql
Db.NomeTabela = "C003_PRODUTOSIMAGEM"
Return Db.Salvar(Cm, "PImagem_ID", vlCodigo)
End If

Catch ex As Exception
Return "Ocorreu um erro ao tentar alterar o registro:" & ex.Message
Finally
Cm = Nothing
Db = Nothing
End Try


End Function

Public Function Excluir() As String
Try
' Cria uma instância do objeto de conexao com o banco de dados
' e preenche os dados necessarios para realizar as operacoes
Db = New classDatabase.DbSql
Db.NomeTabela = "C003_PRODUTOSIMAGEM"
Return Db.Excluir("PImagem_ID", vlCodigo)
Catch ex As Exception
Return "Ocorreu um erro ao tentar excluir o registro: " & ex.Message
Finally
Db = Nothing
End Try

End Function

Public Function Consultar(ByVal pParametro As String, ByVal pOrdem As String) As Data.DataSet
Dim Sql As New System.Text.StringBuilder

Sql.Append(" SELECT PImagem_ID, Produto_ID, PImagem_Titulo, PImagem_Nome, ")
Sql.Append(" PImagem_Imagem, PImagem_Tipo, PImagem_Tamanho, PImagem_Comentario ")
Sql.Append(" FROM C003_PRODUTOSIMAGEM (NOLOCK) ")

If Trim(pParametro) <> "" Then Sql.Append(" WHERE " & Trim(pParametro) & "")
If Trim(pOrdem) <> DBNull.Value.ToString Then Sql.Append(" ORDER BY " & pOrdem & " ") Else Sql.Append(" ORDER BY Produto_ID, PImagem_Titulo ")

Try
' Cria uma instância do objeto de conexao com o banco de dados
' e preenche os dados necessarios para realizar as operacoes
Db = New classDatabase.DbSql
Return Db.Consultar(Sql.ToString)
Catch ex As Exception
Return Nothing
Finally
Db = Nothing
End Try

End Function

Public Function ConsultaAvancada(ByVal pParametro As String, ByVal pOrdem As String) As Data.DataSet
Dim Sql As New System.Text.StringBuilder

Sql.Append(" SELECT A.PImagem_ID, A.Produto_ID, A.PImagem_Titulo, ")
Sql.Append(" A.PImagem_Nome, A.PImagem_Imagem, A.PImagem_Tipo, ")
Sql.Append(" A.PImagem_Tamanho, A.PImagem_Comentario, ")
Sql.Append(" B.Categoria_ID, B.Produto_Codigo, B.Produto_Nome, ")
Sql.Append(" B.Produto_Valor, B.Produto_Desconto, C.Categoria_Nome ")
Sql.Append(" FROM C003_PRODUTOSIMAGEM A (NOLOCK) ")
Sql.Append(" INNER JOIN C002_PRODUTOS B (NOLOCK) ON (B.Produto_Codigo = A.Produto_ID) ")
Sql.Append(" INNER JOIN C001_CATEGORIAS C (NOLOCK) ON (C.Categoria_ID = B.Categoria_ID) ")

If Trim(pParametro) <> "" Then Sql.Append(" WHERE " & Trim(pParametro) & "")
If Trim(pOrdem) <> DBNull.Value.ToString Then Sql.Append(" ORDER BY " & pOrdem & " ") Else Sql.Append(" ORDER BY B.Categoria_ID, A.Produto_ID, A.PImagem_Titulo ")

Try
' Cria uma instância do objeto de conexao com o banco de dados
' e preenche os dados necessarios para realizar as operacoes
Db = New classDatabase.DbSql
Return Db.Consultar(Sql.ToString)
Catch ex As Exception
Return Nothing
Finally
Db = Nothing
End Try

End Function

'Função para retornar verdadeiro quando estação encontrada
Private Function Busca(ByVal pParametro As String) As Boolean
Dim Ds As Data.DataSet
Ds = Consultar(pParametro, "")
If Ds.Tables(0).Rows.Count <> 0 Then
Return True
Else
Return False
End If
End Function

End Class

End Namespace

Salvando arquivo:



Private Sub AssociaImagem()
Dim Gi As DataGridItem
Dim pArquivo As Byte()
Dim pTitulo, pComentario As WebControls.TextBox
Dim pFU As WebControls.FileUpload
Dim pProduto As Integer
Dim Ds As Data.DataSet

Ds = Produto.Consultar(" Categoria_ID = " & ddlCategoria.SelectedValue & " AND Produto_Codigo = '" & Trim(TxtCodigo.Text) & "' ", "")
pProduto = Ds.Tables(0).Rows(0)("Produto_ID")

For Each Gi In DataGrid2.Items
pFU = Gi.Cells(0).FindControl("gFuArquivo")
pTitulo = Gi.Cells(0).FindControl("gTxtTitulo")
pComentario = Gi.Cells(0).FindControl("gTxtComentario")

If (Trim(pTitulo.Text) <> DBNull.Value.ToString) And (pFU.HasFile = True) Then
With Imagem
.Codigo = 0
.Produto = pProduto
.Nome = pFU.FileName
.Titulo = Trim(pTitulo.Text)
pArquivo = New Byte(pFU.PostedFile.InputStream.Length) {}
.Imagem = pArquivo
.Tamanho = pFU.PostedFile.ContentLength
.Tipo = pFU.PostedFile.ContentType
If Trim(pComentario.Text) <> DBNull.Value.ToString Then .Comentario = Trim(pComentario.Text) Else .Comentario = DBNull.Value.ToString
End With
Imagem.Inserir()
End If

Next

End Sub

Alguém sabe o que está errado?


Grato,


Ilano.


Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá KhaosDoctor,

 

Antes de tudo, obrigado pela atenção. Vamos lá!

 

Objeto:

 

'Declarando as variáveis:

 

Private vlCodigo As Integer

Private vlProduto As Integer

Private vlTitulo As String

Private vlNome As String

Private vlImagem As Byte()

Private vlTipo As String

Private vlTamanho As Integer

Private vlComentario As String

 

...

 

Property Imagem()

Get

Return vlImagem

End Get

Set(ByVal Value)

vlImagem = Value

End Set

End Property

 

...

 

Public Function Inserir()

Try

Cm = New SqlCommand

' Gera o código

Db = New classDatabase.DbSql

Db.NomeTabela = "C003_PRODUTOSIMAGEM"

vlCodigo = Db.Chave("PImagem_ID")

Db = Nothing

With Cm.Parameters

.AddWithValue("@PImagem_ID", vlCodigo)

.AddWithValue("@Produto_ID", vlProduto)

.AddWithValue("@PImagem_Titulo", Trim(vlTitulo))

.AddWithValue("@PImagem_Nome", Trim(vlNome))

.AddWithValue("@PImagem_Imagem", vlImagem)

.AddWithValue("@PImagem_Tipo", Trim(vlTipo))

.AddWithValue("@PImagem_Tamanho", vlTamanho)

If Trim(vlComentario) <> "" Then .AddWithValue("@PImagem_Comentario", Trim(vlComentario)) Else .AddWithValue("@PImagem_Comentario", DBNull.Value)

End With

 

If Busca(" Produto_ID = " & vlProduto & " AND PImagem_Nome = '" & Trim(vlNome) & "' ") Then

Return "Registro já cadastrado!"

Else

' Cria uma instância do objeto de conexao com o banco de dados

' e preenche os dados necessarios para realizar as operacoes

Db = New classDatabase.DbSql

Db.NomeTabela = "C003_PRODUTOSIMAGEM"

Return Db.Salvar(Cm)

End If

 

Catch ex As Exception

Return "Ocorreu um erro ao tentar incluir um novo registro: " & ex.Message

Finally

Cm = Nothing

Db = Nothing

End Try

 

End Function

Salvando o arquivo (página ASPX.vb):

 

Private Sub AssociaImagem()

Dim Gi As DataGridItem

Dim pArquivo As Byte()

Dim pTitulo, pComentario As WebControls.TextBox

Dim pFU As WebControls.FileUpload

Dim pProduto As Integer

Dim Ds As Data.DataSet

 

Ds = Produto.Consultar(" Categoria_ID = " & ddlCategoria.SelectedValue & " AND Produto_Codigo = '" & Trim(TxtCodigo.Text) & "' ", "")

pProduto = Ds.Tables(0).Rows(0)("Produto_ID")

 

For Each Gi In DataGrid2.Items

pFU = Gi.Cells(0).FindControl("gFuArquivo")

pTitulo = Gi.Cells(0).FindControl("gTxtTitulo")

pComentario = Gi.Cells(0).FindControl("gTxtComentario")

 

If (Trim(pTitulo.Text) <> DBNull.Value.ToString) And (pFU.HasFile = True) Then

With Imagem

.Codigo = 0

.Produto = pProduto

.Nome = pFU.FileName

.Titulo = Trim(pTitulo.Text)

pArquivo = New Byte(pFU.PostedFile.InputStream.Length) {}

.Imagem = pArquivo

.Tamanho = pFU.PostedFile.ContentLength

.Tipo = pFU.PostedFile.ContentType

If Trim(pComentario.Text) <> DBNull.Value.ToString Then .Comentario = Trim(pComentario.Text) Else .Comentario = DBNull.Value.ToString

End With

Imagem.Inserir()

End If

 

Next

 

End Sub

Pronto! As linhas destacas em vermelho são variáveis/campos/componentes de imagem.

 

 

:huh: Ninguém???

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.