none
Como inserir uma imagem no banco de dados RRS feed

  • Pergunta

  • Bom dia galera, já pesquisei no fórum mas não achei nada q poderia me ajudar; preciso realizar um teste, na aplicação que estou trabalhando.

    Criei uma tabela no banco de dados e um dos campos é para armazenar uma imagem, que será lida por um "BannerSlider" na minha página XHTML, não existe nada pronto ainda, mas já criei as classes para a pesquisa no banco e recuperação da imagem, mas não tenho como testar a aplicação sem conteúdo no banco.

    Então, o que quero é um comando de INSERT que realize a inserção de uma imagem no banco de dados cujo o campo é do tipo VARBINARY(MAX).

    Desde já agradeço a todos.

    quarta-feira, 9 de abril de 2014 14:32

Respostas

  • Leandro,

    Segue abaixo um exemplo para execução deste INSERT:

    INSERT INTO TB_EXEMPLO (Nome, Bytes)
    SELECT
        'foto.jpg' AS Nome,
        Img.BulkColumn AS Bytes
    FROM
        OPENROWSET(BULK N'C:\foto.jpg', SINGLE_BLOB) AS Img
    

    Lembrando que para conseguir obter o conteúdo do arquivo dentro do SQL Server você deve habilitar o uso da procedure "xp_cmdshell". Veja abaixo:

    EXEC sp_configure 'show advanced options', 1
    GO
    RECONFIGURE
    GO
    
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    RECONFIGURE
    GO
    


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 9 de abril de 2014 18:33
    Moderador
  • Leandro,

    Normalmente o "erro 21" é indicado quando um dispositivo/diretório não foi encontrado ou quando um usuário não possui acesso.

    Realmente você fez uma boa citação, você deve inserir apenas os arquivos armazenados no mesmo servidor do SQL e com os devidos acessos de leitura no diretório definido para obter o(s) arquivo(s).

    Apenas como teste, insira o usuário "Everyone" do seu Windows com acesso neste diretório "D:\temp\".

    Não esqueça de marcar como resposta todos os posts que ajudaram na sua solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 9 de abril de 2014 22:58
    Moderador

Todas as Respostas

  • Leandro,

    Segue abaixo um exemplo para execução deste INSERT:

    INSERT INTO TB_EXEMPLO (Nome, Bytes)
    SELECT
        'foto.jpg' AS Nome,
        Img.BulkColumn AS Bytes
    FROM
        OPENROWSET(BULK N'C:\foto.jpg', SINGLE_BLOB) AS Img
    

    Lembrando que para conseguir obter o conteúdo do arquivo dentro do SQL Server você deve habilitar o uso da procedure "xp_cmdshell". Veja abaixo:

    EXEC sp_configure 'show advanced options', 1
    GO
    RECONFIGURE
    GO
    
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    RECONFIGURE
    GO
    


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 9 de abril de 2014 18:33
    Moderador
  • Durval, ao executar o INSERT, aparece o seguinte erro:

    Mensagem 4861, Nível 16, Estado 1, Linha 1
    Não é possível carregar em massa porque o arquivo "D:\temp\foto-competicao.jpg" não pôde ser aberto. Código do erro do sistema operacional 21(O dispositivo não está pronto.).

    Sendo que anteriormente, eu rodei o segundo script que você postou aqui.

    O banco de dados armazenado em um servidor remoto influencia neste INSERT?
    quarta-feira, 9 de abril de 2014 21:41
  • Leandro,

    Normalmente o "erro 21" é indicado quando um dispositivo/diretório não foi encontrado ou quando um usuário não possui acesso.

    Realmente você fez uma boa citação, você deve inserir apenas os arquivos armazenados no mesmo servidor do SQL e com os devidos acessos de leitura no diretório definido para obter o(s) arquivo(s).

    Apenas como teste, insira o usuário "Everyone" do seu Windows com acesso neste diretório "D:\temp\".

    Não esqueça de marcar como resposta todos os posts que ajudaram na sua solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 9 de abril de 2014 22:58
    Moderador
  • Durval, era isso mesmo, a imagem deve estar no servidor do sql e a pasta deve ter permissão para acesso de todos.

    Testei aqui e funcional perfeitamente.

    Muito obrigado.

    quinta-feira, 10 de abril de 2014 17:42