Como ler e gravar um arquivo ou de uma coluna BLOB usando ADO.NET e Visual translation from VPE for Csharp .NET

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 317016
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 316887.
Para um Microsoft Visual C++ .NET versão deste artigo, consulte 317017.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 317043.
Sumário
Este artigo descreve como ler e gravar dados das colunas BLOB LongVarBinary em uma tabela de banco de dados.

Este artigo contém exemplos da classe SqlDataAdapter e a classe OleDbDataAdapter . As únicas diferenças entre duas classes, diferente de nomes de classe , são as seqüências de conexão e a declaração de parâmetros SQL; a técnica fundamental para recuperar os dados BLOB é o mesmo.

O código de exemplo neste artigo usa um registro de exemplo que é adicionado à tabela Categorias do banco de dados Northwind. Após usar esse exemplo, convém remover esse registro: digite o seguinte comando no SQL Query Analyzer e pressione F5:
use Northwinddelete from Categories where CategoryName = 'Test'
back to the top

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Um dos seguintes: Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Server ou Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server 7.0 ou posterior
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Microsoft Visual Studio .NET
  • Conceitos básicos do ADO.NET e sintaxe
back to the top

Criar o projeto e adicione o código

  1. Abra o SQL Query Analyzer.
  2. Altere o banco de dados padrão para Northwind. Execute o seguinte comando e pressione F5:
    usar Northwind
  3. Inserir um novo registro na tabela Categorias do banco de dados Northwind. Execute o seguinte comando e pressione F5:
    Insira valores categories(categoryname) ('Test')
    adicionar este registro adicional na tabela Categorias somente para testar este exemplo; você não precisa modificar qualquer parte dos dados existentes nesta tabela.
  4. Abra o Visual Studio .NET.
  5. Crie um novo aplicativo Visual translation from VPE for Csharp .NET Windows.
  6. Adicione referências ao seu projeto para System.Data.SQLClient e System.Data.OLEDB . Faça isso adicionando as duas linhas seguintes à parte superior do seu arquivo Form1.cs:
    using System.Data.SqlClient;using System.Data.OleDb;
  7. Adicione quatro botões ao Form1 e alterar a propriedade Text de cada um dos botões da seguinte maneira:
    • SQLBlob2File
    • OlDbBlob2File
    • File2OleDbBlob
    • File2SqlBlob
  8. Adicionar as seguintes declarações de variável de seqüência de caracteres em public class Form1:
    string destfilepath;string sourcefilepath;					
  9. Adicione o seguinte código no evento Load do formulário :
    destfilepath = @"c:\mytest.bmp";sourcefilepath = @"c:\windows\coffee bean.bmp";					
  10. No evento Click de cada um dos botões, chame os procedimentos a seguir conforme apropriado para cada botão:
    • Clique em evento do botão é rotulado SqlBlob2File:
      SqlBlob2File(destfilepath);
    • Clique em evento do botão é rotulado OLDbBlob2File:
      OlDbBlob2File(destfilepath);
    • Clique em evento do botão é rotulado File2OleDbBlob:
      File2OleDbBlob(sourcefilepath);
    • Clique em evento do botão é rotulado File2SqlBlob:
      File2SqlBlob(sourcefilepath);
  11. Cole as seguintes funções no Form1:
    • SqlBlob2File
    • OleDbBlob2File
    • File2SqlBlob
    • File2OleDbBlob
  12. Antes de tentar gravar o arquivo .bmp no disco, clique no botão File2OleDbBlob para carregar uma imagem no SQL Server do banco de dados e, em seguida, pressione F5 para executar o código.

Ler de uma coluna BLOB

As funções no código de exemplo a seguir usar a classe DataReader para recuperar o valor BLOB e atribua o valor BLOB a uma matriz de bytes. Como o BLOB já está totalmente na memória, os dados não precisam ser em partes e o BLOB é atribuído a uma matriz byte.

Há duas chamadas para o método GetBytes :
  • A primeira chamada obtém o tamanho de BLOB em bytes e é usada para alocar a matriz de bytes.
  • A segunda chamada recupera os dados. O objeto FileStream é usado para gravar a matriz de bytes no disco.
public void SqlBlob2File(string DestFilePath){   try   {	int PictureCol = 0; // the column # of the BLOB field	SqlConnection cn = new SqlConnection("server=localhost;integrated security=yes;database=NorthWind");	SqlCommand cmd = new SqlCommand("SELECT Picture FROM Categories WHERE CategoryName='Test'", cn);	cn.Open();	SqlDataReader dr  = cmd.ExecuteReader();	dr.Read();	Byte[] b = new Byte[(dr.GetBytes(PictureCol, 0, null, 0, int.MaxValue))];	dr.GetBytes(PictureCol, 0, b, 0, b.Length);	dr.Close();	cn.Close();	System.IO.FileStream fs =      new System.IO.FileStream(DestFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write);	fs.Write(b, 0, b.Length);	fs.Close();	MessageBox.Show("Image written to file successfully");   }   catch(SqlException ex)   {   MessageBox.Show (ex.Message);   }   }public void OleDbBlob2File(string DestFilePath){   try   {	int PictureCol = 0; // the column # of the BLOB field	OleDbConnection cn = new OleDbConnection("provider=sqloledb;server=localhost;" +      "user id=uid;password=password;database=NorthWind");	OleDbCommand cmd = new OleDbCommand("SELECT Picture FROM Categories " +      "WHERE CategoryName='Test'", cn);	cn.Open();	OleDbDataReader dr  = cmd.ExecuteReader();	dr.Read();	Byte[] b = new Byte[(dr.GetBytes(PictureCol, 0, null, 0, int.MaxValue))];	dr.GetBytes(PictureCol, 0, b, 0, b.Length);	dr.Close();	cn.Close();	System.IO.FileStream fs =      new System.IO.FileStream(DestFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write);	fs.Write(b, 0, b.Length);	fs.Close();	MessageBox.Show("Image written to file successfully");   }   catch(OleDbException ex)   {   MessageBox.Show (ex.Message);   }}				
back to the top

Gravar em uma coluna BLOB

As funções no código de exemplo a seguir usarem o objeto de comando e o objeto de parâmetro para gravar dados de uma matriz de byte para uma coluna BLOB. A técnica a seguir lê o arquivo completamente na memória. Portanto, essa técnica não tem divida os dados quando dados são gravados em servidor. The Byte array and its Length parameter are passed to the Parameter constructor.
private void File2SqlBlob(string SourceFilePath){   try   {	SqlConnection cn = new SqlConnection("server=localhost;integrated security=yes;database=NorthWind");	SqlCommand cmd = new SqlCommand("UPDATE Categories SET Picture=@Picture " +      "WHERE CategoryName='Test'", cn);	System.IO.FileStream fs = new System.IO.FileStream(SourceFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);	Byte[] b = new Byte[fs.Length];	fs.Read(b, 0, b.Length);	fs.Close();	SqlParameter P = new SqlParameter("@Picture", SqlDbType.VarBinary, b.Length,      ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, b);	cmd.Parameters.Add(P);	cn.Open();	if (cmd.ExecuteNonQuery() == 1)		MessageBox.Show("Your images stored successfully");	cn.Close();   }   catch(SqlException ex)   {   MessageBox.Show (ex.Message);   }}public void File2OleDbBlob(string SourceFilePath){	   try   {		OleDbConnection cn = new OleDbConnection("provider=sqloledb;server=localhost;" +      "user id=uid;password=password;initial catalog=NorthWind");	OleDbCommand cmd = new OleDbCommand("UPDATE Categories SET Picture=? WHERE CategoryName='Test'", cn);	System.IO.FileStream fs = 					new System.IO.FileStream(SourceFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);	Byte[] b = new Byte[fs.Length]; fs.Read(b, 0, b.Length);	fs.Close();	OleDbParameter P = new OleDbParameter("@Picture", OleDbType.VarBinary, b.Length,      ParameterDirection.Input, false, 0, 0, null,DataRowVersion.Current, b);	cmd.Parameters.Add(P);	cn.Open();	if (cmd.ExecuteNonQuery() == 1)		MessageBox.Show("Your images stored successfully");	cn.Close();						   }   catch(OleDbException ex)   {   MessageBox.Show (ex.Message);   }}				
back to the top

Solução de problemas

  • Talvez você precise modificar o código é descrito neste artigo para usar o código em LongVarChar colunas ou nas colunas LongVarWChar .
  • Modificar a seqüência de caracteres de conexão e instruções SQL de acordo com seu próprio servidor.
  • Adicione, a verificação de erros no caso de sua consulta não retorna nenhum registro.
back to the top
Referências
Para obter mais informações sobre como trabalhar com BLOBs no ADO.NET, consulte a seguinte documentação biblioteca MSDN:
Obtendo valores BLOB de um banco de dados
http://msdn.microsoft.com/en-us/library/87z0hy49.aspx
back to the top
kbblob kbnetsearch

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 317016 - Última Revisão: 12/07/2015 08:47:55 - Revisão: 1.2

Microsoft ADO.NET (included with the .NET Framework), Microsoft Visual C# .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowtomaster KB317016 KbMtpt
Comentários