Aprender a programar em C# – Parte 4

No parte anterior dessa série de artigos que abordamos como Aprender a Programar em C#, você viu um pouco sobre a linguagem C# (C-Sharp) de como ela surgiu, tipos de dados, sintaxes, variáveis, operadores, controle de fluxo e laços de repetição, também pode ver um pouco sobre o desenvolvimento de uma aplicação e a compilação por linha de comando e também viu o desenvolvimento utilizando o Visual Studio.

Nessa nova parte, iremos abordar o desenvolvimento de uma aplicação C# utilizando o Visual Studio, porém essa aplicação irá utilizar banco de dados SQL Server, ou seja, criaremos uma simples aplicação que realizar CRUD (Create, Read, Update e Delete) em um banco de dados. Se você não conhece nada de banco de dados, é uma oportunidade para começar a aprender.

Imaginando que você conhece banco de dados, em especial o SQL Server, que também sabe utilizar o SQL Server Manager e já tenha uma instancia do SQL Server ou SQL Server Express instalado, vamos criar a tabela de clientes.

Abra seu SQL Manager e crie a tabela utilizando o script sql abaixo.


CREATE TABLE CLIENTES
(
	ID INT IDENTITY(1, 1) NOT NULL,
	NOME VARCHAR(60) NOT NULL,
	DATA_NASCIMENTO DATETIME NOT NULL,
	EMAIL VARCHAR(150) NULL,
	CONSTRAINT PK_CLIENTES PRIMARY KEY (ID)
)
GO

Vamos incluir também em nossa alguns registros iniciais.


INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Ferris Q. Finley','1997/06/08','interdum.ligula.eu@egestas.edu');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Taylor H. Stone','1986/06/02','amet.dapibus@sedleoCras.edu');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Meredith U. Cote','1992/12/20','purus@nullavulputate.org');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Orla Y. Stout','1981/04/27','ante@dignissim.edu');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Susan F. Sanford','1995/04/08','ut.aliquam@arcuvelquam.edu');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Kennedy Y. Carr','1986/12/22','dolor@arcuCurabiturut.co.uk');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Baker X. Mckee','1983/08/09','nascetur@Donecatarcu.org');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Sade R. Pitts','1994/06/14','commodo.tincidunt.nibh@non.co.uk');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Judah M. Farrell','1993/08/17','Maecenas@massa.co.uk');
INSERT INTO CLIENTES (NOME,DATA_NASCIMENTO,EMAIL) VALUES ('Maya N. Singleton','1986/11/03','erat.eget@arcuAliquamultrices.org');

Com o banco de dados pronto, já podemos iniciar o desenvolvimento.

aprender_programar_csharp_parte4_001

Sugiro para o desenvolvimento desse projeto o Visual Studio Community 2015 porque alem de gratuito, ele é completo e atende bem as nossas necessidades. Para efetuar o download, basta ir diretamente no site do Visual Studio acessando o link www.visualstudio.com.

aprender_programar_csharp_parte4_002

Dando continuidade, abra o Visual Studio e clique no menu File > New > Project e escolha o template Windows Desktop > Windows Forms Application. Para nosso projeto também utilizaremos o .NET Framework 4.5. Defina o nome do projeto como ProgramarCSharpComBancoDados.

aprender_programar_csharp_parte4_003

No template escolhido, já teremos um Form criado na qual iremos adicionar 1 DataGridView e 4 Button.

Precisaremos alterar o nome dos nossos objetos. Para fazer isso, clique com o botão direito em cima do objeto que deseja e altere a propriedade “(Name)” de cada objeto.

aprender_programar_csharp_parte4_005

Para o DataGridView defina o nome como gridClientes,para o primeiro botão que usado para para listar os clientes no grid defina o nome como btnListar, o segundo será para excluir e terá o nome de btnExcluir, o terceiro será para editar e terá o nome de btnEditar e o quarto botão será para incluir um novo cliente e terá o nome de btnNovo.

A posição dos componentes em tela não fará diferença. Distribua os objetos da forma que achar conveniente.

aprender_programar_csharp_parte4_004

Agora adicione vamos adicionar a Connection String no App.config da aplicação. Acesse o Solution Explorer, localize o App.Config e dê um duplo clique sobre ele para que possamos incluir a linha abaixo:


  <connectionStrings>
    <add name="DbConnection" connectionString="Data Source=<seu_servidor>;User Id=<seu_usuario>;Password=<sua_senha>;Initial Catalog=<seu_bancodados>" providerName="System.Data.SqlClient" />
  </connectionStrings>

Adicionaremos a biblioteca System.Configuration.dll clicando com botão direito sobre a pasta References e Add References.

aprender_programar_csharp_parte4_006

Vamos começar a codificar atribuindo as operações de consulta, exclusão, edição e inclusão para os respectivos botões. Para inicio, dê um duplo clique no botão Listar e realize a codificação conforme abaixo:


private void btnListar_Click(object sender, EventArgs e)
{
	var dataTable = new DataTable();

	// Retorna para a variavel a ConnectionString configurada no App.Config
	var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DbConnection"].ConnectionString;

	// Cria uma instancia de conexão com o banco de dados
	using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
	{
		// Abre a conexão
		connection.Open();

		// Cria uma instancia do command
		using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand())
		{
			// Comando SQL que será executado
			var _sqlQuery = "SELECT * FROM CLIENTES";

			command.Connection = connection;
			command.CommandText = _sqlQuery;

			// Adiciona o resultado em um DataTable
			using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(command))
			{
				adapter.Fill(dataTable);
			}
		}

		// Fecha conexão
		connection.Close();
	}

	// Atribui o resultado ao grid
	gridClientes.DataSource = dataTable;
	// Gera automaticamente as colunas
	gridClientes.AutoGenerateColumns = true;
	// Muda o modo de seleção da grid para linha inteira
	gridClientes.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}

Para realizar o teste, basta apertar F5 ou clicar no menu Debug > Start Debugging.

aprender_programar_csharp_parte4_007

Agora vamos codificar o botão Excluir clicando duas vezes sobre ele e atribuindo o código baixo:


private void btnExcluir_Click(object sender, EventArgs e)
{
	if (gridClientes.SelectedRows.Count > 0)
	{
		// Pega o ID da primeira coluna da linha selecionada e converte para Integer
		int id;
		int.TryParse(gridClientes.SelectedRows[0].Cells[0].Value.ToString(), out id);

		// Retorna para a variavel a ConnectionString configurada no App.Config
		var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DbConnection"].ConnectionString;

		// Cria uma instancia de conexão com o banco de dados
		using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
		{
			// Abre a conexão
			connection.Open();

			// Cria uma instancia do command
			using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand())
			{
				// Comando SQL que será executado
				var _sqlQuery = "DELETE FROM CLIENTES WHERE ID = @ID";

				command.Connection = connection;
				command.CommandText = _sqlQuery;
				command.Parameters.AddWithValue("id", id);

				// Executa a query
				command.ExecuteNonQuery();
			}

			// Fecha conexão
			connection.Close();
		}

		// Invoca o botão listar
		btnListar_Click(sender, e);
	}
}

Para os botões de Editar e Novo vamos criar um segundo formulário que terá os campos que deverão ser preenchidos. Clique com o botão direto sobre o projeto e depois selecione Add > Windows Form.

aprender_programar_csharp_parte4_008

aprender_programar_csharp_parte4_009

Criado o formulário, precisaremos alterar o seu construtor para que ele possa receber valores do tipo Integer. Esses valores será o ID para utilizarmos o mesmo formulário para Edição e Inclusão. O código deverá ficar conforme abaixo:


private int Id;
public Form2(int id = 0)
{
	this.Id = id;
	InitializeComponent();
}

Agora vamos adicionar os campos necessários e atribuir nome para eles.

aprender_programar_csharp_parte4_010

Adicione 1 Botão, 3 labels, 2 Textbox e 1 DateTimePicker. Renomeie para btnSalvar, txtNome, txtDataNascimento e txtEmail respectivamente. Feito isso, vamos atribuir o código para o botão Salvar. Dê um duplo clique sobre o botão Salvar.


private void btnSalvar_Click(object sender, EventArgs e)
{
	var nome = txtNome.Text;
	var dataNascimento = txtDataNascimento.Value;
	var email = txtEmail.Text;

	// Retorna para a variavel a ConnectionString configurada no App.Config
	var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DbConnection"].ConnectionString;

	// Cria uma instancia de conexão com o banco de dados
	using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
	{
		// Abre a conexão
		connection.Open();

		// Cria uma instancia do command
		using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand())
		{
			command.Connection = connection;

			#region Comando SQL que será executado

			var _sqlQuery = string.Empty;

			// Se foi passado o Id, é para editar
			if (this.Id > 0)
			{
				_sqlQuery = "UPDATE CLIENTES SET NOME = @NOME, EMAIL = @EMAIL, DATA_NASCIMENTO = @DATA_NASCIMENTO WHERE ID = @ID";

				command.Parameters.AddWithValue("id", this.Id);
			}
			else
			{
				_sqlQuery = "INSERT INTO CLIENTES(NOME, DATA_NASCIMENTO, EMAIL) VALUES(@NOME, @DATA_NASCIMENTO, @EMAIL)";
			}

			command.Parameters.AddWithValue("NOME", nome);
			command.Parameters.AddWithValue("DATA_NASCIMENTO", dataNascimento);
			command.Parameters.AddWithValue("EMAIL", email);

			command.CommandText = _sqlQuery;

			#endregion

			// Executa a query
			command.ExecuteNonQuery();
		}

		// Fecha conexão
		connection.Close();
	}

	// Fecha o formulario
	this.Close();
}

Agora vamos atribuir o código que será responsável por carregar os dados caso seja passado o Id do registro que desejamos editar. Voltando ao modo Designer, dê duplo clique no Form e atribua o código abaixo.


private void Form2_Load(object sender, EventArgs e)
{
	var dataTable = new DataTable();

	// Retorna para a variavel a ConnectionString configurada no App.Config
	var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DbConnection"].ConnectionString;

	// Cria uma instancia de conexão com o banco de dados
	using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
	{
		// Abre a conexão
		connection.Open();

		// Cria uma instancia do command
		using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand())
		{
			// Comando SQL que será executado
			var _sqlQuery = "SELECT * FROM CLIENTES WHERE ID = @ID";

			command.Connection = connection;
			command.CommandText = _sqlQuery;
			command.Parameters.AddWithValue("ID", this.Id);

			// Adiciona o resultado em um DataTable
			using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(command))
			{
				adapter.Fill(dataTable);
			}
		}

		// Fecha conexão
		connection.Close();
	}

	if (dataTable != null && dataTable.Rows.Count > 0) {
		var row = dataTable.Rows[0];
		txtNome.Text = row["NOME"].ToString();
		txtDataNascimento.Value = Convert.ToDateTime(row["DATA_NASCIMENTO"].ToString());
		txtEmail.Text = row["EMAIL"].ToString();
	}

}

E agora para finalizar o formulário principal, vamos atribuir a codificação para chamar o formulário de edição/inclusão. Para codificar, primeiro execute um duplo clique sobre os botões.


private void btnNovo_Click(object sender, EventArgs e)
{
	// Executa o formulario
	var form2 = new Form2();
	// Defini o titulo do formulário
	form2.Text = "Novo";
	// Centraliza o form em relação ao form principal
	form2.StartPosition = FormStartPosition.CenterParent;
	// Abre o form em modo Dialog
	form2.ShowDialog();
	// Invoca o botão de listar após o dialog ser fechado
	btnListar_Click(sender, e);
}


private void btnEditar_Click(object sender, EventArgs e)
{
	if (gridClientes.SelectedRows.Count > 0)
	{
		int id;
		// Pega o ID da primeira coluna da linha selecionada e realiza a conversão para Integer
		int.TryParse(gridClientes.SelectedRows[0].Cells[0].Value.ToString(), out id);

		// Executa o formulario passando o Id do registro que será editado
		var form2 = new Form2(id);
		// Defini o titulo do formulário
		form2.Text = "Editar";
		// Centraliza o form em relação ao form principal
		form2.StartPosition = FormStartPosition.CenterParent;
		// Abre o form em modo Dialog
		form2.ShowDialog();
		// Invoca o botão de listar após o dialog ser fechado
		btnListar_Click(sender, e);
	}
}

Ao executar nossa aplicação, já podemos listar, excluir, incluir e editar os registros.

aprender_programar_csharp_parte4_011

Até aqui você aprendeu como criar formulários, efetuar a chamada de um formulário através de outros, efetuar a conexão com banco de dados SQL Server e efetuar transações efetuando as quarto operações Consulta, Inclusão, Exclusão e Edição. Procure exercitar atribuindo mais campos de dados ou até mesmo faça um novo projeto de cadastro mais completo.

Fonte do projeto: Github.

Até o próximo artigo e bom estudo!