Ir para conteúdo

POWERED BY:

Arquivado

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

wdsf

Problemas ao criar DAO e uma inserção

Recommended Posts

Bom dia pessoal,

 

 

Comecei a estudar o C# a um tempo e estou tendo um problema que deve ser relativamente simples, porém estou tendo rsrs.

 

Estou querendo criar uma classe DAO como uma simples conexão, só de forma didatica e um outro arquivo instanciando essa classe e tentando logo em seguida fazer uma inserção no banco, mas cheguei um momento que me enrolei e tava tentando fazer na tentativa e erro, mas como tô estudando isso não é bom.

 

Segue abaixo o código.

 

na classe DAO.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;



namespace CRUD_MYSQL
{
    public class Dao
    {

        private string conn;

        public string conectar()
        {

            try
            {
                string connectionString = "server=localhost;uid=root;pwd=;database=dbalbuns";

                MySqlConnection this.conn = new MySqlConnection(connectionString);
                this.conn.Open();

                if (this.conn.State == ConnectionState.Open)
                {
                    HttpContext.Current.Response.Write("Conectado");
                }

                return this.conn;

            }
            catch (Exception)
            {
                HttpContext.Current.Response.Write("erro de conexão");
                //Response.Write("");

                return this.connectionString;

            }


        }
    }
}

nesse arquivo dá esse erro: expected na linha 26 (this.conn)

 

 

arquivo WebForm1.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using System.Data;

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

                        Dao conectar = new Dao();

                        MySqlCommand cmd = new MySqlCommand();
                        cmd.CommandText = "insert into albuns (titulo, descricao, preco) values ('a', 'a', '1')";
                        cmd.Connection = conectar.conectar();
//cmd.Connection = conectar.Open();

                        cmd.ExecuteNonQuery();
                     
        }

    }
}

e nesse arquivo dá o seguinte erro: Cannot implicitly convert type 'string' to 'MySql.Data.MySqlClient.MySqlConnection'

 

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você vai ter rever esse código, pois na classe Dao o conn é uma simples string e vc trata ela mais embaixo como um objeto de conexão.

 

Acontece a mesma coisa no webform

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você vai ter rever esse código, pois na classe Dao o conn é uma simples string e você trata ela mais embaixo como um objeto de conexão.

 

Acontece a mesma coisa no webform

Mas esse conn no final tem que ter um return né?! Pra eu poder utiliza-lo lá na frente retornando a conexão?!

eu entendi mais ou menos o que você disse, tentei fazer desse jeito, mas deu o seguinte erro: Cannot implicitly convert type 'MySql.Data.MySqlClient.MySqlConnection' to 'string'

 

esse código que acusa esse erro.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;



namespace CRUD_MYSQL
{
    public class Dao
    {

        public string conectar()
        {

            try
            {
                string connectionString = "server=localhost;uid=root;pwd=;database=dbalbuns";

                MySqlConnection conn = new MySqlConnection(connectionString);
                conn.Open();

                if (conn.State == ConnectionState.Open)
                {
                    HttpContext.Current.Response.Write("Conectado");
                }

                return conn;

            }
            catch (Exception)
            {
                HttpContext.Current.Response.Write("erro de conexão");
                //Response.Write("");

               // return conn;

            }


        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda continua retornando errado, pois seu metodo retorna uma string e o retorno do metodo é MySqlConnection

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ivan tentei dessa forma agora. Não sei se é a correta.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;



namespace CRUD_MYSQL
{
    public class Dao
    {

        public void conectar()
        {

            try
            {
                string connectionString = "server=localhost;uid=root;pwd=;database=dbalbuns";

                MySqlConnection conn = new MySqlConnection(connectionString);
                conn.Open();

                if (conn.State == ConnectionState.Open)
                {
                    HttpContext.Current.Response.Write("Conectado");
                }

                return;

            }
            catch (Exception)
            {
                HttpContext.Current.Response.Write("erro de conexão");
                //Response.Write("");

               // return conn;

            }


        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara, você colocou inicialmente assim: "Public String conectar()", só que na hora de dar o retorno você está retornando uma string aqui:

HttpContext.Current.Response.Write("erro de conexão");

E

HttpContext.Current.Response.Write("Conectado");

O segundo método, usando o void está errado pois void não pode retornar resultados, ele deve apenas fazer a função e acabar, você realmente necessita de function.

 

Agora ao invés de retornar uma string como resultado você vai precisar retornar um objeto mySQLConnection:

 

namespace CRUD_MYSQL
{
    public class Dao
    {


        public MySqlConnection conectar()
        {


            try
            {
                string connectionString = "server=localhost;uid=root;pwd=;database=dbalbuns";


                MySqlConnection conn = new MySqlConnection(connectionString);
                conn.Open();


//Você sempre vai ter o status aberto aqui
                return conn;


            }
            catch (Exception ex)
            {
                
               //durante o tratamento de erros é mais fácil você usar o throw Exception
               throw ex;


            }




        }
    }
}

Você também pode usar o [inline]Throw new MySqlException(ex.Message);[/inline] assim você vai poder usar o catch quando você chamar o método.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a demora em responder. Obrigado KhaosDoctor, entendi o que você quis dizer, olha eu fiz um pequeno teste aqui e funcionou. Fiquei um pouco perdido também por que não tenho muito tempo com o PHP e fui pegar o C# também pra estudar e lá no PHP já não tem esse hábito de ficar declarando o tipo da variável e isso somou mais ainda pra me deixar mais perdido rsrs. Estou deixando aqui o código abaixo.

 

DAO.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;



namespace CRUD_MYSQL
{
    public class Dao
    {
        private MySqlConnection conn = null;

        public MySqlConnection conectar()
        {

            string connectionString = "server=localhost;uid=root;pwd=;database=dbalbuns";

            this.conn = new MySqlConnection(connectionString);

            this.conn.Open();

            try
            {
                if (this.conn.State == ConnectionState.Open)
                {
                    HttpContext.Current.Response.Write("Conectado");
                }

                return this.conn;
            }

            catch (Exception)

            {
                HttpContext.Current.Response.Write("erro de conexão");

                return this.conn;
            }

        }

WebForm1.apsx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using System.Data;

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

            Dao conectar = new Dao();

            MySqlConnection Conexao = conectar.conectar();

            string query = "insert into albuns (titulo, descricao, preco) values ('a', 'a', '1')";
            using (MySqlCommand cmd = new MySqlCommand(query, Conexao))
            {
                cmd.ExecuteNonQuery();
            }

        }

    }
}

Obrigado a todos que me ajudaram de alguma forma!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas lembre-se, você está retornando a conexão mesmo quando ocorre erro, isto está errado, pois se a conexão for retornada com erro o programa falhará.

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.