wdsf 0 Denunciar post Postado Agosto 23, 2014 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
Ivan.Teles 23 Denunciar post Postado Agosto 23, 2014 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
wdsf 0 Denunciar post Postado Agosto 23, 2014 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
Ivan.Teles 23 Denunciar post Postado Agosto 23, 2014 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
wdsf 0 Denunciar post Postado Agosto 23, 2014 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
KhaosDoctor 242 Denunciar post Postado Agosto 25, 2014 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
wdsf 0 Denunciar post Postado Agosto 27, 2014 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
KhaosDoctor 242 Denunciar post Postado Agosto 28, 2014 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