Programar se aprende programando, certo? E nada melhor para aprender do que ter um protótipo funcional com o código fonte a partir do qual podemos estudar.
Este singelo projeto feito na linguagem C# realiza o acesso e as operações de inclusão, edição e exclusão em uma base de dados SQL Server.
Vamos ao que interessa…
O projeto poderá ser aberto nos seguintes IDEs:
- Visual Studio 2010 (você pode baixar uma versão trial)
- Visual C# 2010 Express Edition – (é grátis)
- SharpDevelop 4.0 – (é grátis)
Além disso você deverá instalar os seguintes recursos:
O banco de dados SQL Server
A aplicação acessa a tabela Livros de um banco de dados SQL Server definido como Catalogo. Na figura abaixo temos a estrutura da tabela:
O script para criar o banco de dados, as tabelas e as stored procedures no SQL Server é dado a seguir:
USE [Catalogo]
GO
/****** Object: Table [dbo].[Autores] Script Date: 03/28/2011 10:52:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Autores](
[autorid] [int] IDENTITY(1,1) NOT NULL,
[nome] [nchar](10) NULL,
CONSTRAINT [PK_Autores] PRIMARY KEY CLUSTERED
(
[autorid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Livros] Script Date: 03/28/2011 10:52:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Livros](
[livroid] [int] IDENTITY(1,1) NOT NULL,
[autorid] [int] NOT NULL,
[titulo] [nvarchar](150) NULL,
[preco] [money] NULL,
CONSTRAINT [PK_Livros] PRIMARY KEY CLUSTERED
(
[livroid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: StoredProcedure [dbo].[SelAutores] Script Date: 03/28/2011 10:52:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SelAutores]
AS
SELECT * FROM Autores
RETURN
GO
/****** Object: StoredProcedure [dbo].[SchLivros] Script Date: 03/28/2011 10:52:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SchLivros]
AS
SELECT * FROM Livros
RETURN
GO
/****** Object: StoredProcedure [dbo].[IncluirAutor] Script Date: 03/28/2011 10:52:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[IncluirAutor]
@nome nvarchar(150)
AS
INSERT INTO Autores (nome)
Values(@nome)
GO
Você pode executar o script acima no SQL Server Management Studio para criar o banco de dados e as tabelas.
A interface da aplicação
A seguir temos a interface da aplicação no formulário form1.cs que utiliza os seguintes controles:
- DataGridView – dgvLista;
- TextBox – txtPesquisar, txtTitulo e txtPreco;
- Button – btnAtualizar, btnSalvar, btnCancelar, btnIncluir, btnDeletar e btnFechar;
O código da aplicação (partes principais)
No início do formulário temos a definição dos namespaces usados no projeto:
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Data.SqlClient;
Note que estamos referenciando o namespace para acessar as classes ADO .NET para o SQL Server.
A seguir logo após a declaração do formulário temos a definição das variáveis ADO .NET para conexão com o banco de dados SQL Server:
SqlConnection sqlCon = new SqlConnection();
SqlDataAdapter daLivros = new SqlDataAdapter();
DataSet dsLivros = new DataSet();
A string de conexão usada no programa é a seguinte:
sqlCon.ConnectionString = @"Data Source=.SQLEXPRESS;Initial Catalog=Catalogo;Integrated Security=True";
Se você pretende usar outro banco de dados basta alterar os nomes dessas variáveis conforme o provedor pertinente.
1 – Código da rotina SalvaMudancas() – Esta rotina verifica qual a ação a ser realizada : inclusão ou edição dos dados. Para incluir informações é usado os métodos NewRow()/Add e para atualizar os dados BeginEdit()/EndEdit() e ao final o método Update();
private void SalvaMudancas()
{
try
{
SqlCommandBuilder cbLivros = new SqlCommandBuilder(daLivros);
DataTable dtLivros = dsLivros.Tables["tblLivros"];
DataRow drLivros;
if (isIncluirFlag)
{
drLivros = dtLivros.NewRow();
drLivros["titulo"] = txtTitulo.Text;
drLivros["preco"] = Convert.ToDecimal(txtPreco.Text);
dtLivros.Rows.Add(drLivros);
}
else if (isEditarFlag)
{
drLivros = dtLivros.Rows.Find(dgvLista.SelectedRows[0].Cells[0].Value);
drLivros.BeginEdit();
drLivros["titulo"] = txtTitulo.Text;
drLivros["preco"] = Convert.ToDecimal(txtPreco.Text);
drLivros.EndEdit();
}
// envia mensagem ao SQL Server para persistir dados
daLivros.Update(dsLivros, "tblLivros");
formataGridView();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
AtualizaDataSet();
SetButtons(true);
SetEnabled(false);
}
2 – Código do botão Deletar – O código utiliza o método Find e a seguir o método Delete; ao final para persistir as alterações usa o método Update();
private void btnDeletar_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Tem certeza?", "Deletar", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
DataTable dtLivros = dsLivros.Tables["tblLivros"];
DataRow drLivros;
if (dgvLista.SelectedRows.Count > 0)
{
// deleta a linha selecionada
drLivros = dtLivros.Rows.Find(dgvLista.SelectedRows[0].Cells[0].Value);
drLivros.Delete();
SqlCommandBuilder cbLivros = new SqlCommandBuilder(daLivros);
// envia mudanças ao SQL Server
daLivros.Update(dsLivros, "tblLivros");
AtualizaDataSet();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
3 – Código do evento Click do DataGridView
private void dgvLista_CellClick(object sender, DataGridViewCellEventArgs e)
{
// é um cabeçalho ?
if (e.RowIndex > -1)
{
// não
txtTitulo.Text = dgvLista.Rows[e.RowIndex].Cells[2].Value.ToString();
txtPreco.Text = dgvLista.Rows[e.RowIndex].Cells[3].Value.ToString();
}
}
No evento Click do controle DataGridView estamos obtendo os valores para o titulo e preco do livro e exibindo nos controles de formulário.
Executando o projeto iremos obter:
Enfim uma aplicação simples mas que mostra como você pode realizar a manutenção dos dados acessando um banco de dados SQL Server.
Pegue o projeto completo aqui: AcessoSQLServer_CSharp.zip
Eu sei é apenas C# , mas eu gosto…