none
Como salvar uma imagem em um banco de dados? RRS feed

  • Pergunta

  • ola queria aprender a salvar uma imagem fisica e nao somente o caminho. Em um banco de dados MSSQL 2014.

    Alguem poderia me da uma força?

    sexta-feira, 15 de janeiro de 2016 18:25

Respostas

  • Boa noite Márcio,

    Para armazenar uma imagem no banco de dados, você pode fazer de duas maneiras:

    1. Referência: você pode salvar a imagem em um diretório e no banco de dados apenas o seu caminho, para ter apenas a sua referência. Por exemplo: a imagem "MSDN.PNG" está no diretório "C:/MSDN_Imagens/", logo a referência armazenada no campo será "C:/MSDN_Imagens/MSDN.PNG";
    2. Arquivo: para armazenar o arquivo da imagem no BD, você pode utilizar alguns tipos de dados ( VARBINARY(MAX) para imagens de até 2GB, FILESTREAM para imagens acima desse tamanho). Abaixo segue um exemplo de como inserir uma imagem no BD.
    CREATE TABLE Pessoa
    (
        IdPessoa int,
        Nome varchar(50) not null,
        Foto varbinary(max) not null
    )
    
    
    INSERT INTO Employees (IdPessoa, Nome, Foto ) 
    SELECT 1, 'Marcio', BulkColumn 
    FROM Openrowset( Bulk 'C:\MSDN_Imagens\foto.bmp', Single_Blob) as Foto 

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/

    • Sugerido como Resposta SimorC sábado, 16 de janeiro de 2016 18:02
    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:55
    sexta-feira, 15 de janeiro de 2016 21:01
  • Boa tarde.

    Só para complementar a resposta do Bruno, em alguns momentos vale mais a pena utilizar a primeira forma (Referência), pois, dependendo do ambiente e até mesmo da lógica do aplicativo, o sistema poderá ficar muito pesado e lento.

    Sem falar que salvando no sistema de arquivos ainda é possível ter várias regras de negócio ou até mesmo storages diferentes para tal função, fazendo com que o sistema melhore sua dinamicidade e escalabilidade.


    Att., Rafael Simor

    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:55
    sábado, 16 de janeiro de 2016 18:05

Todas as Respostas

  • Marcio,

    Segue post do Pedro Junior Galvão, bem explicativo. Vê se te ajuda. 

    https://pedrogalvaojunior.wordpress.com/2012/07/20/dica-armazenando-arquivos-de-imagem-no-sql-server-2008-e-r2-atraves-do-comando-openrowset-em-conjunto-com-a-opcao-bulk/ 


    Qualquer coisa, avisa que podemos seguir trocando ideias.

    Att,

    Marcos Lanzarini
    Administrador de Banco de Dados
    Microsoft Certified Professional

    Se a resposta foi útil, por favor, vote-a como útil. Se isso resolveu seu caso, marque-a como resposta.
    • Sugerido como Resposta MarcosLanzarini sexta-feira, 15 de janeiro de 2016 19:48
    • Não Sugerido como Resposta MarcosLanzarini sexta-feira, 15 de janeiro de 2016 19:48
    • Sugerido como Resposta MarcosLanzarini sexta-feira, 15 de janeiro de 2016 19:48
    sexta-feira, 15 de janeiro de 2016 18:57
  • Você pode guarda-la usando base-64.

    Toda imagem que for enviada ao seu servidor deve ser convertida em base-64, assim vc transforma a imagem em caracteres e pode guardar em um campo do seu banco que tenha o tipo "text" ( text - pois quanto maior o tamanho da imagem enviada ao seu servidor mais caracteres ela vai gerar )

    Veja uns exemplos:

    Conversor de imagem para Base64 online:

    https://www.base64-image.de/

    Exemplos de código:

    http://stackoverflow.com/questions/21325661/convert-image-path-to-base64-string

    http://stackoverflow.com/questions/17874733/converting-image-to-base64


    If the answer was helpful vote / mark as answered

    Se a resposta foi útil vote / marque como respondido


    • Editado Jean LLopes sexta-feira, 15 de janeiro de 2016 19:17
    • Sugerido como Resposta Jean LLopes sexta-feira, 15 de janeiro de 2016 19:17
    sexta-feira, 15 de janeiro de 2016 19:16
  • Boa noite Márcio,

    Para armazenar uma imagem no banco de dados, você pode fazer de duas maneiras:

    1. Referência: você pode salvar a imagem em um diretório e no banco de dados apenas o seu caminho, para ter apenas a sua referência. Por exemplo: a imagem "MSDN.PNG" está no diretório "C:/MSDN_Imagens/", logo a referência armazenada no campo será "C:/MSDN_Imagens/MSDN.PNG";
    2. Arquivo: para armazenar o arquivo da imagem no BD, você pode utilizar alguns tipos de dados ( VARBINARY(MAX) para imagens de até 2GB, FILESTREAM para imagens acima desse tamanho). Abaixo segue um exemplo de como inserir uma imagem no BD.
    CREATE TABLE Pessoa
    (
        IdPessoa int,
        Nome varchar(50) not null,
        Foto varbinary(max) not null
    )
    
    
    INSERT INTO Employees (IdPessoa, Nome, Foto ) 
    SELECT 1, 'Marcio', BulkColumn 
    FROM Openrowset( Bulk 'C:\MSDN_Imagens\foto.bmp', Single_Blob) as Foto 

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/

    • Sugerido como Resposta SimorC sábado, 16 de janeiro de 2016 18:02
    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:55
    sexta-feira, 15 de janeiro de 2016 21:01
  • Boa tarde.

    Só para complementar a resposta do Bruno, em alguns momentos vale mais a pena utilizar a primeira forma (Referência), pois, dependendo do ambiente e até mesmo da lógica do aplicativo, o sistema poderá ficar muito pesado e lento.

    Sem falar que salvando no sistema de arquivos ainda é possível ter várias regras de negócio ou até mesmo storages diferentes para tal função, fazendo com que o sistema melhore sua dinamicidade e escalabilidade.


    Att., Rafael Simor

    • Marcado como Resposta Marcos SJ segunda-feira, 18 de janeiro de 2016 12:55
    sábado, 16 de janeiro de 2016 18:05