Create method that avoids code repetition in ASP.NET with SQL

Asked

Viewed 179 times

1

I am building an ASP.NET site, using C#. I want to 'link' the site information (text and images) in an SQL Server database. This part of connection I’ve managed to do successfully.

However, I have to repeat the coding of the BD connection for each group of Abels and images on my site, and this is generating an unnecessary code repetition. I would like help to create a method that would solve my problem, and not make me repeat codes unnecessarily.

HTML code of my aspx page:

 <div class="row">
        <div class="col-lg-4">
            <!-- MÓDULO 1-->

            <asp:Image ID="Image1" runat="server" />
            <h2><asp:Label ID="lbl_modulo1" runat="server"></asp:Label></h2>
            <p><asp:Label ID="lbl_texto_modulo1" runat="server"></asp:Label></p>
            <a href="#" class="btn btn-primary">Saiba Mais</a>
            <!--FIM do MÓDULO 1-->
        </div>

        <div class="col-lg-4">
            <!-- MÓDULO 2-->
            <asp:Image ID="Image2" runat="server" />
            <h2><asp:Label ID="lbl_modulo2" runat="server"></asp:Label></h2>
            <p><asp:Label ID="lbl_texto_modulo2" runat="server"></asp:Label></p>
            <a href="#" class="btn btn-primary">Saiba Mais</a>
            <!--FIM do MÓDULO 2-->
        </div>

        <div class="col-lg-4">
            <!-- MÓDULO 3-->
            <asp:Image ID="Image3" runat="server" />
            <h2><asp:Label ID="lbl_modulo3" runat="server"></asp:Label></h2>
            <p><asp:Label ID="lbl_texto_modulo3" runat="server"></asp:Label></p>
            <a href="#" class="btn btn-primary">Saiba Mais</a>
            <!--FIM do MÓDULO 3-->
        </div>

    </div>

And here is the code in C#, used in connection with bank:

 public partial class Teste_Footer : System.Web.UI.Page
 {
 protected void Page_Load(object sender, EventArgs e)
 {

    //CONEXÃO COM BANCO        
    string connStr = @"DATA SOURCE = .\SQLEXPRESS; Initial Catalog = website; USER Id = sa; Password = 123456;";
    SqlConnection conn = new SqlConnection(connStr);

    conn.Open();

    //CRIAÇÃO DO COMANDO
    SqlCommand cmd = new SqlCommand("SELECT IMAGEM_CAMINHO, TITULO, TEXTO FROM [dbo].[PAG_SITE] WHERE ID='1'");
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = conn;

    string imagem = "";
    string titulo = "";
    string texto = "";

    //LENDO DO BANCO
    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        imagem += reader["IMAGEM_CAMINHO"].ToString();
        titulo += reader["TITULO"].ToString();
        texto += reader["TEXTO"].ToString();
    }
    conn.Close();

    Image1.ImageUrl += imagem;
    lbl_modulo1.Text = titulo;
    lbl_texto_modulo1.Text = texto;

    //-----------------------------------------------------------------------------------------

    conn.Open();

    //CRIAÇÃO DO COMANDO
    SqlCommand cmd2 = new SqlCommand("SELECT IMAGEM_CAMINHO, TITULO, TEXTO FROM [dbo].[PAG_SITE] WHERE ID='2'");
    cmd2.CommandType = System.Data.CommandType.Text;
    cmd2.Connection = conn;

    string imagem2 = "";
    string titulo2 = "";
    string texto2 = "";

    //LENDO DO BANCO
    SqlDataReader reader2 = cmd2.ExecuteReader();
    while (reader2.Read())
    {
        imagem2 += reader2["IMAGEM_CAMINHO"].ToString();
        titulo2 += reader2["TITULO"].ToString();
        texto2 += reader2["TEXTO"].ToString();
    }
    conn.Close();

    Image2.ImageUrl += imagem2;
    lbl_modulo2.Text = titulo2;
    lbl_texto_modulo2.Text = texto2;

    //-----------------------------------------------------------------------------------------

    conn.Open();

    //CRIAÇÃO DO COMANDO
    SqlCommand cmd3 = new SqlCommand("SELECT IMAGEM_CAMINHO, TITULO, TEXTO FROM [dbo].[PAG_SITE] WHERE ID='3'");
    cmd3.CommandType = System.Data.CommandType.Text;
    cmd3.Connection = conn;

    string imagem3 = "";
    string titulo3 = "";
    string texto3 = "";

    //LENDO DO BANCO
    SqlDataReader reader3 = cmd3.ExecuteReader();
    while (reader3.Read())
    {
        imagem3 += reader3["IMAGEM_CAMINHO"].ToString();
        titulo3 += reader3["TITULO"].ToString();
        texto3 += reader3["TEXTO"].ToString();
    }
    conn.Close();

    Image3.ImageUrl += imagem3;
    lbl_modulo3.Text = titulo3;
    lbl_texto_modulo3.Text = texto3;              

    }
 }

4 answers

1

How good programming practices would be more interesting you create a system in three layers. Where each layer fulfills your responsibility.

Presentation layer

HTML and business layer calls in Codebehind

public partial class Teste_Footer : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {


            RegrasNegocio obj = new RegrasNegocio();
            Tipo Retorno = new Tipo();

            //Chama a camada de negócio
            Retorno = obj.Consultar(1);

            // Utiliza o objeto de retorno
            Image1.ImageUrl += Retorno.IMAGEM_CAMINHO;
            lbl_modulo1.Text = Retorno.TITULO;
            lbl_texto_modulo1.Text = Retorno.TEXTO;

 //Chama a camada de negócio
            Retorno = obj.Consultar(2);

            // Utiliza o objeto de retorno
            Image2.ImageUrl += Retorno.IMAGEM_CAMINHO;
            lbl_modulo2.Text = Retorno.TITULO;
            lbl_texto_modulo2.Text = Retorno.TEXTO;

 //Chama a camada de negócio
            Retorno = obj.Consultar(3);

            // Utiliza o objeto de retorno
            Image3.ImageUrl += Retorno.IMAGEM_CAMINHO;
            lbl_modulo3.Text = Retorno.TITULO;
            lbl_texto_modulo3.Text = Retorno.TEXTO;

        }
    }

Business layer

Where you assign all the business rules of your system such as validations.

 public class RegrasNegocio
    {

        public Tipo Consultar(Int32 ID)
        {

            AcessoDados obj = new AcessoDados();
            Tipo Retorno = new Tipo();

            try
            {

                // Regras de negócio

                if (ID == 0)
                    throw new Exception("ID não informado.");

                //Chama a camada responsável pelo acesso aos dados e conexão com o banco
                Retorno = obj.ConsultarPorID(ID);

                return Retorno;

            }
            catch (Exception)
            {

                throw;
            }

        }


    }

Layer of data access

Connection to the database and calls to it.

class AcessoDados
    {

        public Tipo ConsultarPorID(Int32 ID)
        {

            // Criação do objeto tipo para retorno do método
            Tipo Objetoretorno = new Tipo();


            //CONEXÃO COM BANCO        
            // Adicionar Referência System.Configuration.ConfigurationManager, Retorna a string do web Config
            string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["root"].ConnectionString;  
            SqlConnection conn = new SqlConnection(connStr);

            conn.Open();

            //CRIAÇÃO DO COMANDO
            SqlCommand cmd = new SqlCommand("SELECT IMAGEM_CAMINHO, TITULO, TEXTO FROM [dbo].[PAG_SITE] WHERE ID=@ID"); // Utilize Procedures SLQ 

            // Utilize paramentros para o método ser dinâmico
            cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID; 

            cmd.CommandType = System.Data.CommandType.Text;
            cmd.Connection = conn;

            //LENDO DO BANCO
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Objetoretorno.IMAGEM_CAMINHO = reader["IMAGEM_CAMINHO"].ToString();
                Objetoretorno.TITULO = reader["TITULO"].ToString();
                Objetoretorno.TEXTO = reader["TEXTO"].ToString();
            }

            conn.Close();

            //Retorna um objeto que vai ser utilizado no codeBehind
            return Objetoretorno;

        }

    }

Support Layer Object type representing an entity

 public class Tipo
    {
        public String IMAGEM_CAMINHO { get; set; }
        public String TITULO { get; set; }
        public String TEXTO { get; set; }

    }

1


 //CONEXÃO COM BANCO        
        string connStr = @"DATA SOURCE = .\SQLEXPRESS; Initial Catalog = website; USER Id = sa; Password = 123456;";
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand(@"SELECT IMAGEM_CAMINHO, TITULO, TEXTO FROM [dbo].[PAG_SITE] WHERE ID IN ('1', '2', '3')", conn);
        SqlDataAdapter adpt = new SqlDataAdapter(cmd);

        DataTable tb = new DataTable();
        adpt.Fill(tb);

        for(int i =0; i < tb.Rows.Count; i++)
        {
            var img = this.FindControl("Image" + (i+1)) as Image;
            var lbl = this.FindControl("lbl_modulo" + (i+1)) as Label;
            var lbltexto = this.FindControl("lbl_texto_modulo" + (i+1)) as Label;

            img.ImageUrl = tb.Rows[i]["IMAGEM_CAMINHO"] as string;
            lbl.Text = tb.Rows[i]["TITULO"] as string;
            lbltexto.Text = tb.Rows[i]["TEXTO"] as string;
        }
  • I got it. Thank you.

  • Always the orders :)

0

The connection can be a c# class (Models/Dataacess.Cs). Dataacess.Cs file

public class DataAcess{
   public DataAcess(){
      //Colque sua String de Conexão  aqui
      //Retorne a variavel de conexao.
   }

Dai in your Page_load Code you will do the following

//Chama seu Model DataAcess
var conexao = DataAcess();
conexao.Open();

0

The ideal would be to use Configurationmanager, that is to store the connection string on the web.config of your website:

  1. Place the connection string in your Webconfig:

      <connectionStrings>
            <add name="root" connectionString="Server=localhost;Database=seubanco;User ID=root;Password=suasenha;"/>
        </connectionStrings>
    
  2. In the Code Behind or Class that will use the connection you include the System.Configuration namespace:

    using System.Configuration;
    
  3. Then only assign to a string by calling the web.config connection

    string connStr = Configurationmanager.Connectionstrings["root"]. Connectionstring; Sqlconnection Conn = new Sqlconnection(connStr);

  • Hello Willian, thanks for your attention, but my problem is not with the connection string with the bank, even though your tip is plausible. My goal is to avoid repeating codes in the part where I use SELECT to search for the information in the database.

  • I added another answer check if it suits you.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.