C# - Cadastro de Alunos com foto no SQL Server - I


Este artigo abordar alguns assuntos muito procurados por aqueles que estão iniciando no aprendizado da linguagem C# como:

As tarefas são simples e em diversos artigos eu já mostrei como realizar cada uma delas, mas resolvi criar este projeto simples para ajudar quem esta começando na linguagem C#,

Recursos necessários :

Criando o projeto Windows Forms, o banco de dados Escola e a tabela Alunos

Abra o Visual C# 2010 Express Edition e crie um novo projeto do tipo Windows Forms Application: File-> New Project;

Selecione o template Windows Forms Application, informe o nome Alunos e clique em OK;

Vamos agora criar o banco de dados e tabela que iremos usar no projeto.

Para isso precisamos exibir a janela DataBase Explorer; Faça isso no menu : View -> Other Windows -> DataBase Explorer

Em seguida clique com o botão direito do mouse sobre Data Connections da janela DataBase Explorer e selecione Add Connection...

A seguir na janela Add Connection informe o nome do banco de dados Escola e clique no botão OK;

Uma janela de diálogo será apresentada informando que o banco de dados não existe e será criado. Confirme.

O banco de dados será criado e exibido na janela DataBase Explorer.

Vamos criar a tabela Alunos. Para isso clique com o botão direito do mouse sobre Tables e selecione Add New Table;

A seguir defina a estrutura da tabela com os campos: id, nome, curso, mensalidade e foto sendo que a id é chave primária do tipo identidade (auto-numeração) conforme mostra a figura abaixo:

Neste momento já tem os o projeto , o banco de dados e a tabela prontos para serem usados e fizemos tudo isso usando apenas a ferramenta Visual C# 2010 Express e o banco de dados SQL Server 2005 Express.

Criando as Stored Procedures do projeto

Agora vamos definir as stored procedures que iremos usar no projeto.

Na janela DataBase Explorer clique com o botão direito do mouse sobre Stored Procedures e selecione Add New Stored Procedure;

Na janela Stored Procedure vamos criar as seguintes stored procedures:

1- getAlunos - Obtém os dados dos alunos registrados na tabela Alunos;

Clique em Salvar;

2- inserir_Alunos: Inclui uma aluno na tabela Alunos;

3- atualiza_Alunos - Atualiza os dados de um aluno na tabela Alunos;

4- exclui_Alunos - exclui os dados de um aluno na tabela Alunos;

Ao final deveremos ter as seguintes stored procedures gravadas no banco de dados:

Cuidando da interface

Vamos agora definir no formulário form1.cs criado por padrão quando o projeto foi criado incluindo no mesmo os controles:

Defina no formulário o seguinte leiaute:

Antes de começar a definir o código do formulário vou comentar alguns detalhes que precisamos entender.

O botão Procurar permite localizar um registro na tabela e exibir no formulário. Estamos realizando a busca usando o InputBox e para isso devemos incluir uma referência no projeto a Microsoft.VisualBasic;

Obs: Não existe nada parecido com o InputBox na linguagem C# ou fazemos a referência a MIcrosoft.VisualBasic, ou, se você se sentir incomodado com isso, crie seu próprio controle inputbox;

No menu Project clique em Add Reference e na janela Add Reference selecione a aba .NET e escolha o item Microsoft.VisualBasic e clique em OK;

Após isso defina o namespace no código do projeto: using Microsoft.VisualBasic

Estamos gravando e recuperando imagens do banco de dados SQL Server e para isso temos que converter a imagem em dados binários pois não podemos armazenar diretamente as imagens no banco de dados.

Para fazer isso podemos adotar duas soluções:

1- Armazenar o caminho da imagem no banco de dados;
2- Converter a imagem para dados binários e inserir os dados binários no banco de dados e converter os dados binários novamente para o formato imagem quando tivermos que recuperar a imagem;

Ambas as soluções apresentam vantagens e desvantagens mas a segunda é mais consistente e por isso vamos adotá-la.

Podemos converter uma imagem em dados binários usando os recursos das classes FileStream ou MemoryStream;

1- O FileStream utiliza a localização para converter uma imagem em dados binários;

FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open,FileAccess.Read);
byte[] photo_aray = new byte[fs.Length];
fs.Read(photo_aray, 0, photo_aray.Length);


2- O MemoryStream usa a imagem para converter para dados binários;

MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
byte[] photo_aray = new byte[ms.Length];
ms.Position = 0;
ms.Read(photo_aray, 0, photo_aray.Length);


Vamos usar o MemoryStream e para isso temos que incluir uma referência ao namespace: System.IO no projeto;

Podemos usar o objeto comando para trabalhar com as stored procedures passando o nome da stored procedure para o objeto command e especificando o CommandType como do tipo StoreProcedure;

cmd = new SqlCommand("getAlunos", con);
cmd.CommandType = CommandType.StoredProcedure;


O objeto DataAdapter não pode interagir diretamente com stored procedures mas se precisarmos usar um DataAdapter podemos passar o objeto Command para o objeto DataAdapter;

Para localizar um registro estamos usando o método Find o qual requer detalhes da coluna chave primária, esses detalhes são fornecidos definindo o código:

adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

Após localizar o registro temos que obter o índice do registro de forma afim de permitir a navegação pelos registros:

Ex: rno= ds.Tables[0].Rows.IndexOf(drow);

Agora podemos iniciar a definição do código do nosso projeto.

Aguarde a continuação do artigo em : C# - Cadastro de Alunos com foto no SQL Server - II

Simples, simples assim...

Eu sei é apenas C# , mas eu gosto...

Referências:


José Carlos Macoratti