Published on

January 24, 2008

Usando o tipo de dados binários do SQL Server para armazenar imagens

Neste artigo, vamos explorar como usar o tipo de dados binários do SQL Server para armazenar pequenos arquivos de imagem. Armazenar imagens ou dados binários dentro do SQL Server pode fornecer benefícios como segurança aprimorada, acesso do cliente e controle transacional.

O tipo de dados varBinary(MAX), disponível no SQL 2005 e SQL 2008, é particularmente útil para armazenar imagens. A extensão (MAX) para o tipo Binary significa que não há limite superior de tamanho, e o “var” indica que o tamanho é variável em vez de fixo.

Ao trabalhar com dados binários no SQL Server, é importante escolher o tipo de dados apropriado com base no tamanho das entradas de dados da coluna. De acordo com o SQL BOL (Books On Line), você deve usar Binary quando os tamanhos das entradas de dados da coluna são consistentes e menores que 8.000 bytes. Use varBinary quando os tamanhos das entradas de dados da coluna variam consideravelmente e também são menores que 8.000 bytes. Por fim, use varBinary(MAX) quando as entradas de dados da coluna excederem 8.000 bytes.

Vamos começar criando um banco de dados de teste e uma tabela para armazenar nossas imagens:

USE master;
GO

CREATE DATABASE Test;
GO

USE Test;
GO

CREATE TABLE BLOBTest
(
TestID int IDENTITY(1,1),
BLOBName varChar(50),
BLOBData varBinary(MAX)
);

Agora que temos nossa tabela configurada, podemos inserir uma imagem no banco de dados usando uma instrução TSQL. Observe que esta instrução não funcionará no SQL 2000, pois apenas um tipo de dados (MAX) pode ser o destino.

INSERT INTO BLOBTest
	(BLOBName, BLOBData)
	SELECT 'Primeiro arquivo de teste', 
		BulkColumn FROM OPENROWSET(
			Bulk 'C:\temp\nextup.jpg', SINGLE_BLOB) AS BLOB;

Substitua ‘C:\temp\nextup.jpg’ pelo caminho do sistema de arquivos para o arquivo de imagem. A instrução OPENROWSET permite que o SQL Server acesse dados de um provedor externo, e o provedor Bulk é especificamente projetado para inserir documentos e imagens.

Para visualizar a imagem armazenada no banco de dados, podemos criar um pequeno aplicativo Visual Studio. Aqui está um exemplo de como ler a imagem armazenada do SQL Server e exibi-la em uma página da web:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<% 
    string sConn = @"server=.; database=Test; Integrated Security=True";
    SqlConnection objConn = new SqlConnection(sConn);
    objConn.Open();

    string sTSQL = "SELECT BLOBData FROM BLOBTest";

    SqlCommand objCmd = new SqlCommand(sTSQL, objConn);
    objCmd.CommandType = CommandType.Text;

    SqlDataReader dr = objCmd.ExecuteReader();
    dr.Read();

    Response.BinaryWrite((byte[])dr["BLOBData"]);

    objConn.Close(); 
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html >
<head runat="server">
    <title>Página sem título</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
 
    </div>
    </form>
</body>
</html>

Esta página da web usa a variável sConn para se conectar ao banco de dados. A frase “Integrated Security=True” especifica que a segurança do Windows será usada. Certifique-se de substituir o nome do servidor pelo nome do seu servidor, ou use um ponto se o SQL e o servidor da web estiverem na mesma máquina local.

A instrução SQL recupera os dados da imagem da tabela BLOBTest. Os dados são então transmitidos para a página da web usando o método Response.BinaryWrite. Observe que qualquer HTML na página não será exibido, pois o método BinaryWrite não requer nenhum objeto HTML.

Se você quiser exibir a imagem juntamente com outros dados armazenados no SQL Server, como o nome do arquivo, você pode usar uma solução alternativa. Aqui está um exemplo de como fazer isso:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html >
<head runat="server">
    <title>Página sem título</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Aqui está a imagem <asp:Image ID="Image1" runat="server" ImageUrl="GetPicture.aspx" />
    </div>
    </form>
</body>
</html>

Neste exemplo, criamos uma nova página com um controle de imagem. A URL da imagem é definida como a página GetPicture.aspx, que recupera os dados da imagem do SQL Server e os exibe.

Em conclusão, o tipo de dados binários do SQL Server é uma ferramenta poderosa para armazenar imagens e outros dados binários. Usando o tipo de dados varBinary(MAX), você pode armazenar imagens de qualquer tamanho. Em artigos futuros, exploraremos tópicos mais avançados, como inserir imagens no SQL Server, recuperar imagens específicas por nome e usar procedimentos armazenados e páginas de código por trás.

Obrigado por ler!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.