Usuário com melhor resposta
Inserindo Imagens no SQL Server 2008

Pergunta
-
Boa tarde!
Bom gente, eu tenho uma aplicação em VB6 que cadastra currículos e agora eu preciso permitir que este sistema possa inserir fotos dos candidatos, o desenvolvimento desta aplicação utiliza passagem de parâmetro e o banco é o SQL Server 2008.
Tentei fazer uma SP de insert comum e não funcionou pq descobri q o SQL não consegue fazer isto sozinho, então tentei utilizar OPENROWSET exibia a mensagem de erro "Você não tem permissão para utilizar o comando OPENROWSET ", eu não tenho acesso direto ao BD.
No meu caso salvar o caminho não é a melhor solução, pq vários usuários de lugares diferentes podem inserir imagens e como eu disse eu não tenho acesso direto ao BD para criar a pasta lá e colocar algum tipo de bloquei de segurança na mesma.
Então... socorro!!!! Tem salvação para mim????
- Tipo Alterado Roberto F FonsecaModerator sábado, 19 de janeiro de 2013 01:16 É uma pergunta, não uma discussão/
Respostas
-
Obrigada pela ajuda,mas esta página eu já tinha visto.
Tu já viu isso: http://www.go4expert.com/forums/showthread.php?t=879
ele passa como um parametro comum para a procedure
- Marcado como Resposta Ricardo Russo segunda-feira, 21 de janeiro de 2013 12:07
-
Olá Elizabeth...
Vou deixar aqui minha opinião.
Para armazenar documentos (Imagens, Texto, Planilhas, Apresentações etc) eu utilizo um banco de dados NonSQL chamado MongoDB, ele armazena dos dados no formato JSON;
Gravo numa tabela do SQLServer somente a ID do registro (do MongoDB) do documento e a extensão (JPG, PDF, DOC etc).
Dessa forma eu descentralizo completamente o armazenamento dos dados, com isso ganho em:
Escalabilidade - pois não há limitação do tamanho do campo/registro;
Portabilidade - pois os bancos e backups do SQLServer ficam "normais" por assim dizer;
Velocidade - Por se tratar de um banco "não SQL" não há consulta, a referencia da localização tem de ser passada.
Lembro que desenvolvo em C# e já uso esse recurso desde o C++ passando pelo Delphi/Pascal.
Abraço a todos.
Não esqueça de marcar o post como útil caso tenha te ajudado.
- Marcado como Resposta Ricardo Russo segunda-feira, 21 de janeiro de 2013 12:07
Todas as Respostas
-
Eu imagino que o caso seria criar um camplo do tipo BLOB, ver mais na MSDN
Uma coisa que você vai precisar é no seu código VB serializar a imagem para mandar para o SQL Server.
-
-
Isso foi discutido:
http://social.msdn.microsoft.com/Forums/pt/transactsqlpt/thread/dc69abab-174a-4282-9d23-e33c7c1a2e15
Achei este link intessante:
http://forum.clubedohardware.com.br/resolvido-gravar-imagem/665771
Att.
- Editado Advaldo Mesquita Moreira Junior sexta-feira, 18 de janeiro de 2013 17:12
-
Olá Elizabeth, tem um post excelente sobre o assunto de um dos nossos moderadores o Pedro Galvão Júnior, falando a respeito de inserção de imagens no SQL Server 2008, de repente tu consegue tirar algumas dicas do que fazer:
Espero que ajude, vlew.
--
Marcus Vinícius Bittencourt
blog: isqlserver.wordpress.com
www.sqlserverRS.com.br -
-
Obrigada pela ajuda,mas esta página eu já tinha visto.
Tu já viu isso: http://www.go4expert.com/forums/showthread.php?t=879
ele passa como um parametro comum para a procedure
- Marcado como Resposta Ricardo Russo segunda-feira, 21 de janeiro de 2013 12:07
-
Olá Elizabeth...
Vou deixar aqui minha opinião.
Para armazenar documentos (Imagens, Texto, Planilhas, Apresentações etc) eu utilizo um banco de dados NonSQL chamado MongoDB, ele armazena dos dados no formato JSON;
Gravo numa tabela do SQLServer somente a ID do registro (do MongoDB) do documento e a extensão (JPG, PDF, DOC etc).
Dessa forma eu descentralizo completamente o armazenamento dos dados, com isso ganho em:
Escalabilidade - pois não há limitação do tamanho do campo/registro;
Portabilidade - pois os bancos e backups do SQLServer ficam "normais" por assim dizer;
Velocidade - Por se tratar de um banco "não SQL" não há consulta, a referencia da localização tem de ser passada.
Lembro que desenvolvo em C# e já uso esse recurso desde o C++ passando pelo Delphi/Pascal.
Abraço a todos.
Não esqueça de marcar o post como útil caso tenha te ajudado.
- Marcado como Resposta Ricardo Russo segunda-feira, 21 de janeiro de 2013 12:07
-
-
Elizabeth,
Segue um exemplo pratico em C#, talvez consiga adapta-lo em VB6:
//Insere imagem banco
int intCodigo = Convert.ToInt32(Arquivo.Name.Substring(0, Arquivo.Name.IndexOf('.')) bytes[] byArquivo = File.ReadAllBytes(Arquivo.Directory + "\\" + Arquivo.Name); cCommand.CommandText = "UPDATE premioCH_professor SET IMAGEM=@IMAGEM WHERE CodFuncionario=@CODFUNC"; SqlParameter[] parameter = new SqlParameter[2]; parameter[0] = new SqlParameter("@CODFUNC", intCodigo); parameter[1] = new SqlParameter("@IMAGEM", byArquivo); foreach (SqlParameter item in parameter) { cCommand.Parameters.Add(item); } cCommand.ExecuteNonQuery();
//Recupero para um PictureBox
DataTable dtRetorno = objRecupera.RecuperarImagem(Convert.ToInt32(txtCodigo.Text)); MemoryStream stream = new MemoryStream((byte[])dtRetorno.Rows[0]["IMAGEM"]); pictureBox1.Image = Image.FromStream(stream);
Espero que isso lhe dê melhores ideias.
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos segunda-feira, 4 de fevereiro de 2013 22:24
-
Tenho uma SP que lê a imagem no BD, mas ao chegar na programação o valor vem diferente?Estou desenvolvendo em VB6.
Esta é minha SP:
ALTER PROCEDURE [dbo].[sp_Foto_Candidato_ler]
( @Id_Candidato INTEGER )
WITH RECOMPILE
AS
SET NOCOUNT ON
BEGIN TRANSACTION
-- Seleciona Foto na tabela Foto
SELECT Foto
FROM Foto FT
WHERE FT.id_candidato = @Id_Candidato
IF @@ERROR <> 0 BEGIN
RAISERROR ('Problemas na Leitura da Foto!', 16, 1)
GOTO FINAL_ERRO
END
GOTO FINAL_SP
FINAL_ERRO:
ROLLBACK TRANSACTION
SET NOCOUNT OFF
RETURN (-10)
FINAL_SP:
COMMIT TRANSACTION
SET NOCOUNT OFFAo passar o parâmetro o valor exibido no BD é: '0x31'
Mas no desenvolvimento (programação) o valor exibido é: "1"
e aparece o erro " '3201' BOF ou EOF são verdadeiros, ou o registro atual foi excluído. A operação solicitada pelo aplicativo requer um valor atual."