Ilano 0 Denunciar post Postado Fevereiro 25, 2015 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
KhaosDoctor 242 Denunciar post Postado Fevereiro 25, 2015 Cara, dá uma sintetizada nesse código pega só a parte que insere no banco de dados por favor Compartilhar este post Link para o post Compartilhar em outros sites
Ilano 0 Denunciar post Postado Março 2, 2015 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