C# - Acesso SQL Server com CRUD (ADO .NET)


Programar se aprende programando, certo ?

Acompanhe o curso ADO .NET no links a seguir:
 

C#-  ADO .NET para iniciantes - I

C#-  ADO .NET para iniciantes - II

C#-  ADO .NET para iniciantes - III

C#-  ADO .NET para iniciantes - IV

C#-  ADO .NET para iniciantes - V

C#-  ADO .NET para iniciantes - VI

C#-  ADO .NET para iniciantes - VII

C#-  ADO .NET para iniciantes - VIII

C# - ADO .NET para iniciantes - IX

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.

Então vamos ao que interessa...

O projeto poderá ser aberto nos seguintes IDEs:

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:

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 esta no Super DVD .NET e no Super DVD C#.

Adquirindo o Super DVD .VB , o Super DVD C# ou o Super DVD .NET Você recebe também :

1- O projeto VB .NET completo do programa e 3 resumos (DataSet,DataTable e DataView)

2- Um Curso básico de ADO .NET para a linguagem C# em PDF com 7 capítulos : veja aqui o conteúdo.

Veja como fazer o seu pedido , clique aqui ->
 

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

Referências:


José Carlos Macoratti