 ASP.NET 
-  Trabalhando com BLOBs no SQL Server III
   ASP.NET 
-  Trabalhando com BLOBs no SQL Server III
Continuando o meu artigo ASP .NET - Trabalhando com dados binários no SQL Server , vejamos agora os métodos que irão retornar informações do banco de dados:
Nota: Dependendo da sua necessidade você pode criar mais métodos na classe de acesso a dados.
Agora vamos definir o método getFotos() na mesma classe FotoHelper.vb:
| Public Shared Function getFotos() As List(Of Foto) 'cria uma nova conexao e um objeto command Dim cnn As New SqlConnection(sConexaoBD) Dim cmd As New SqlCommand() 'define uma variavel como uma lista de fotos Dim fotos As New List(Of Foto)()         Dim data As Byte() = New Byte(999) {}
        'define a instrução SQL para selecionar as fotos da tabelacmd.CommandText = "select * from Fotos order by fotoid"         cmd.Connection = cnn
        'abre a conexão e executa o comandocnn.Open()         Dim reader As SqlDataReader = cmd.ExecuteReader()
        'percorre o datareader e preenche a lista de fotos a partir do objeto FotoWhile reader.Read() Dim p As New Foto()             p.FotoID = reader.GetInt32(reader.GetOrdinal("FotoID"))            p.Titulo = reader.GetString(reader.GetOrdinal("Titulo"))            p.Descricao = reader.GetString(reader.GetOrdinal("Descricao"))            p.FotoDados = DirectCast(reader.GetValue(reader.GetOrdinal("Foto")), Byte())
            fotos.Add(p)
        End While
'fecha a conexao e retorna as fotos cnn.Close() Return fotos End Function | 
O código acima já esta comentado mas eu quero que você atente para os seguintes detalhes:
|  -Além do método acima podemos usar os 
      seguintes métodos: - ExecuteReader - Retorna um 
      DataReader; Retorna um conjunto de registro via instrução SQL ou 
      stored Procedure; | 
Agora vamos ao método que irá retornar um registro da tabela com base no código da foto(fotoid):
| Public Shared Function getFotoPorCodigo(ByVal fotoid As Integer) As Foto         'cria uma nova conexao e um objeto command
        Dim cnn As SqlConnection = New SqlConnection(sConexaoBD)Dim cmd As SqlCommand = New SqlCommand()         Dim data() As Byte = New Byte(1000) {}
         'define a instrução SQL para selecionar as fotos pelo codigo
        cmd.CommandText = "select * from Fotos where Fotoid= @fotoid"cmd.Connection = cnn         'define o parâmetro que será usado 
        Dim pId As SqlParameter = New SqlParameter("@fotoid", fotoid)        cmd.Parameters.Add(pId)
        'abre a conexão e executa o comandocnn.Open()         Dim reader As SqlDataReader = cmd.ExecuteReader()
        Dim p As Foto = New Foto()'percorre o datareader e preenche a lista de fotos a partir do objeto Foto While reader.Read()             p.FotoID = reader.GetInt32(reader.GetOrdinal("FotoID"))            p.Titulo = reader.GetString(reader.GetOrdinal("Titulo"))            p.Descricao = reader.GetString(reader.GetOrdinal("Descricao"))            p.FotoDados = CType(reader.GetValue(reader.GetOrdinal("Foto")), Byte())End While 'fecha a conexao e retorna a foto cnn.Close() Return p End Function | 
Note em ambos os métodos definidos como estamos lendo a coluna "Foto" que contêm os dados da foto e que foi definida como do tipo varbinary(MAX).
O método GetValue() do objeto SqlDataReader retorna os dados como um objeto e por isso fazemos uma conversão forçada(Cast) para um array de bytes.
Com isso já temos os todos os métodos que iremos precisar para o nosso Álbum de Fotos vamos agora criar a interface com páginas ASP .NET.
Vamos aproveitar a página Default.aspx já criada e a partir da toolbox incluir um componente DetailsView nesta página;
Após incluir o componente na página clique em DetailsView Tasks e em seguida em Edit Fields;
Agora vamos definir 4 campos conforme a figura abaixo:
|  | Campos Definidos no componente 
    DetailsView: 
 
 | 
Vejamos a seguir a definição de cada campo:
Selecione BoundField e clique em Add e defina a propriedade HeaderText como Titulo;
Repita o processo e defina a propriedade HeaderText como Descrição e para converte o campo para TemplateField clique no link: Convert this field into a TemplateFIeld;
Repita o processo anterior para o campo Foto;
Agora selecione o item ComandField e clique em Add e defina a propriedade ButtonType como igual a Button e os textos para os botões conforme a figura abaixo:

Após selecionar um formato para o componente teremos o seguinte resultado final:
|  | Algumas configurações necessárias 
    ao DetailsView: - Defina a propriedade AutoGenaerateRows como False; - Defina a propriedade DefaultMOde do DetailsView como : ReadyOnly; - Defina a propriedade DataKeysName do DetailsView como igual a FotoID | 
Os campos TemplateFields foram definidos da seguinte forma :
A partir de DetailsView Tasks clique no link Edit Template em seguida defina as propriedades para os campos Descricao e Foto conforme abaixo:
| <Fields> 
    <asp:BoundField
    HeaderText="Titulo 
    :" DataField="Titulo"
    /> </EditItemTemplate> <InsertItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Height="60px" Text='<%# Bind("Descricao") %>' TextMode="MultiLine" Width="429px"></asp:TextBox> </InsertItemTemplate> <ItemTemplate> <asp:TextBox ID="TextBox3" runat="server" Height="49px" Text='<%# Bind("Descricao") %>' TextMode="MultiLine" Width="419px" ReadOnly="True"></asp:TextBox> </ItemTemplate> </asp:TemplateField> 
 <asp:TemplateField HeaderText="Foto :"> <EditItemTemplate> <asp:FileUpload ID="FileUpload1" runat="server" /> </EditItemTemplate> <InsertItemTemplate> <asp:FileUpload ID="FileUpload2" runat="server" /> </InsertItemTemplate> <ItemTemplate> <asp:Image ID="Image1" runat="server" Height="218px" ImageUrl='<%# Eval("FotoID","~/exibeFoto.aspx?fotoid={0}") %>' Width="201px" /> </ItemTemplate> </asp:TemplateField> 
 </Fields> 
 | 
Note que para o campo Foto usamos um controle FileUpload para o modo de inserção e atualização e no modo de exibição usamos um controle Image;
Para encerrar esta parte selecione o controle DetailsView de na janela de propriedades defina a propriedade AllowPaging como igual a True pois desta forma podermos efetuar a paginação pelos registros da tabela.
Obs: Para saber mais veja o meu artigo : Fazendo o Upload de arquivos em ASP.NET
Na próxima parte irei mostrar o código necessário para que possamos incluir, excluir e alterar fotos no banco de dados SQL Server.
Aguarde no próximo artigo : ASP.NET - Trabalhando com BLOBs no SQL Server IV
Até mais ver...
referências:
José Carlos Macoratti