Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

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

Recommended Posts

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:

 

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:

 

37035.gif

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)

GOVocê 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;

37037.gif

 

 

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:

 

37039.gif

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...

 

 

 

http://imasters.com.br/artigo/20998/c-sharp/c-acesso-sql-server-com-crud-ado-net

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.