Exemplo de acesso a dados com SQL Server em C#.

Rotinas com exemplos práticos para acesso a dados no MS SQL Server.


Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 23/08/2016

Acessando dados no SQL Server

Publicamos aqui uma classe para acesso a dados utilizando o SQL Server, caso queira dar uma olhada o link esta logo abaixo.



Agora vamos postar alguns passos e exemplos para que possa ler e gravar seus dados neste banco de dados.

Tratando os Erros

Em todos os exemplos vamos derivar uma classe para tratamento dos erros deixando fácil a captura e exibição dos mesmos durante os processo de consulta e manutenção em nossa base de dados.
Segue abaixo nossa classe para tratamento dos erros, crie uma classe com o nome de Erros.cs em seu projeto copie e cole o código abaixo:

/* 
 * Classe tratamento Erros
 * 
 * By Antonio Azevedo
 * 
 * Visite nossa página http://www.codigoexpresso.com.br
 * 
 */
using System;


public class Erro
{
    private string mErro { get; set; }

    public Erro()
    {
        mErro = "";
    }
    /// <summary>
    /// Retorna a Mensagem de erro
    /// </summary>
    /// <returns></returns>
    public string getMensagemErro()
    {
        return mErro;
    }

    public void setMensagemErro(string mErro)
    {
        this.mErro = mErro;
    }


    public Boolean isErro()
    {
        if (getMensagemErro().Trim().Length > 0)
        {
            return true;
        }

        return false;
    }

    public string MensagemErroFormatada()
    {
        if (isErro())
        {
            return "Um Erro Inesperado aconteceu !!!<br />Procure departamento responsável e relate o erro abaixo<br /><br />" + getMensagemErro();
        }

        return "Operação realizada com sucesso !!!";
    }
}


Para utilizar esta classe declare como dependência em em suas classes de acesso a dados DAO (Data Acess Object), conforme exemplo abaixo:

public class DAO : Erros
{
   // Seu código aqui
}

Fazendo isto nossa classe vai herdar a classe Erros deixando disponível suas funções.

Para todos os exemplos que apresentaremos abaixo considere a seguinte classe:

public class Curso
{
    public int idCurso { get; set; }
    public string Descricao { get; set; }
}


Exemplo de acesso a dados por por linha de comando

Recuperando uma lista de objetos.

public List<Curso> ListaCursos(int idCurso)
{
    // Instancia nossos objetos
    List<Curso> lcursos = new List<Curso>();
    Curso curso = new Curso();

    // Instancia nossa Conexao
    Conexao conexao = new Conexao(TipoConexao.Conexao.WebConfig);

    // Se existe erro na conexao move o erro para a classe de acesso 
    if (conexao.ExisteErro())
    {
        setMensagemErro(conexao.mErro);
        return lcursos;
    }

    try
    {
        SqlDataReader reader;

        // Nosso comando SQL
        string query = "select c.idcurso, descricao_curso = c.descricao from cursos c where idcurso = "+idCurso.ToString()+" order by c.descricao";

        SqlCommand cmd = new SqlCommand(query, conexao.conn);

        // define que o comando é um texto
        cmd.CommandType = System.Data.CommandType.Text;

        // Abre nossa Conexao
        if (conexao.OpenConexao() == false)
        {
            setMensagemErro(conexao.mErro);
            return null;
        }

        reader = cmd.ExecuteReader();

        // recebe os dados de nossa consulta
        while (reader.Read())
        {
            // Inicializa nosso objeto
            curso = new Curso();

            // Carrega os dados
            curso.idCurso = Convert.ToInt32(reader["idcurso"]);
            curso.Descricao = (string)reader["descricao_curso"] ?? "";

            // Adiciona a nossa lista de dados
            lcursos.Add(curso);
        }
    }
    catch (SqlException e)
    {
        // Trata os erros de nossa conexão
        setMensagemErro(e.Message.ToString());
    }

    // Fecha nossa Conexao
    conexao.CloseConexao();

    // Retorna nossa lista de dados
    return lcursos;
}


Exemplo utilizando Stored Procedure com passagem de parâmetro

Recuperando uma lista de objetos.

public List<Curso> ListaCursos(int idCurso)
{
    // Instancia nossos objetos
    List<Curso> lcursos = new List<Curso>();
    Curso curso = new Curso();

    // Instancia nossa Conexao
    Conexao conexao = new Conexao(TipoConexao.Conexao.WebConfig);

    // Se existe erro na conexao move o erro para a classe de acesso 
    if (conexao.ExisteErro())
    {
        setMensagemErro(conexao.mErro);
        return lcursos;
    }

    try
    {
        SqlDataReader reader;

        SqlCommand cmd = new SqlCommand("[pcdListaCurso]", conexao.conn);

        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@idcurso", idCurso);       

        // Abre nossa Conexao
        if (conexao.OpenConexao() == false)
        {
            setMensagemErro(conexao.mErro);
            return null;
        }

        reader = cmd.ExecuteReader();

        // recebe os dados de nossa consulta
        while (reader.Read())
        {
            // Inicializa nosso objeto
            curso = new Curso();

            // Carrega os dados
            curso.idCurso = Convert.ToInt32(reader["idcurso"]);
            curso.Descricao = (string)reader["descricao_curso"] ?? "";

            // Adiciona a nossa lista de dados
            lcursos.Add(curso);
        }
    }
    catch (SqlException e)
    {
        // Trata os erros de nossa conexão
        setMensagemErro(e.Message.ToString());
    }

    // Fecha nossa Conexao
    conexao.CloseConexao();

    // Retorna nossa lista de dados
    return lcursos;
}


Alterando os dados com Stored Procedure e passagem de parametros

A grande diferença para atualização de dados e que não precisamos receber uma consulta então trocamos o ExecuteReader() pelo comando ExecuteNonQuery() veja no exemplo abaixo:

public int Cursos_Update(Curso curso)
{
    // Instanciamos nossa variavel de retorno
    int _return = 0;

    // Instancia nossa Conexao
    Conexao conexao = new Conexao(TipoConexao.Conexao.WebConfig);

    // Se existe erro na conexao move o erro para a classe de acesso 
    if (conexao.ExisteErro())
    {
        setMensagemErro(conexao.mErro);
        return -1;
    }

    try
    {
       
        SqlCommand cmd = new SqlCommand("[pcdCurso_UPD]", conexao.conn);

        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@idcurso", curso.idCurso);
        cmd.Parameters.AddWithValue("@descricao", curso.Descricao);       

        // Abre nossa Conexao
        if (conexao.OpenConexao() == false)
        {
            setMensagemErro(conexao.mErro);
            return  -1;
        }

        _return = cmd.ExecuteNonQuery();
    }
    catch (SqlException e)
    {
        // Trata os erros de nossa conexão
        setMensagemErro(e.Message.ToString());
        _return = -1;
    }

    // Fecha nossa Conexao
    conexao.CloseConexao();

    // Retorna nossa lista de dados
    return _return;
}


No link abaixo você encontra exemplos de Stored Procedure para SQL Server.




Links Relacionados



Comentários