none
realizar insert a partir de formulario RRS feed

  • Pergunta

  • Bom Dia,

    Tenho tentando realizar um insert no banco de dados a partir de um formulário porem sem sucesso, tanto no mysql quanto no sql não obtive sucesso segue abaixo as classes que estou utilizando.

    ---------- classe conexao -----------
    
        class Conexao
    
            {
    
                private MySqlConnection con = new MySqlConnection();
                public MySqlCommand comando = new MySqlCommand();
                public MySqlDataReader leitor;
                private int c;
    
                public void Banco() {
                    if (con.State == System.Data.ConnectionState.Open)
                    con.Close();
                    con.ConnectionString = "server=127.0.0.1;userid=root;database=sca";
                    con.Open();
            }
    
                public int coamand()
                {
                    return comando.ExecuteNonQuery();
                }
    
                public void tipo()
                {
                    comando.Connection = con;
    
                }
    
    -------------- Classe Crud ----------------------
       public class Crud_curso : Dados_curso
            {
                Conexao conexao = new Conexao();
    
                public Boolean inserirCurso()
                {
                    try
                    {
                        conexao.Banco();
                        conexao.tipo();
                        conexao.comando.CommandText = "insert into curso(NomeCurso) values ('" + curso + "');";
                        return true;
    
                    }
                    catch (MySqlException)
                    {
                        return false;
                    }
                }
        }
    
    --------------------- Classe Dados Curso ----------
           protected string curso;
    
            public void setCurso(String curso) {
                this.curso = curso;
            }
    
    --------------chamada dos metodos no formulario ----
    private void button1_Click(object sender, EventArgs e)
            {
                Crud_curso crd = new Crud_curso();
                crd.setCurso(textBox1.Text);
                crd.inserirCurso();
            }

    segunda-feira, 14 de novembro de 2016 14:14

Respostas

  • Justamente, ele nao insere porque voce nao executa o comando (voce só o define):

    Para que o comando se execute, voce tem que fazer:

    comando.ExecuteNonQuery();

    enquanto voce nao executar o comando acima, a query nao é executada.

    sugestao de codigo:

     public class Crud_curso : Dados_curso
            {
                Conexao conexao = new Conexao();
    
                public Boolean inserirCurso()
                {
                    try
                    {
                        conexao.Banco();
                        conexao.tipo();
                        conexao.comando.CommandText = "insert into curso(NomeCurso) values ('" + curso + "');";
                      conexao.comando.ExecuteNonQuery();//executa a query
                        return true;
    
                    }
                    catch (MySqlException)
                    {
                        return false;
                    }
                }
        }

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    segunda-feira, 14 de novembro de 2016 14:46
    Moderador

Todas as Respostas

  • Qual é o erro?

    Sua tabela "curso" contém um campo ID como chave primaria (de preferencia autonumeraçao)? 

    Voce viu essa linha:

    public int coamand()

    Ela nao deveria ser:

    public int comando()

    ???

    Att



    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    segunda-feira, 14 de novembro de 2016 14:28
    Moderador
  • O public metodo public int comand não esta sendo utilizando por enquanto o comando a qual estou me referindo na classe Crud_curso , trata-se do mysqlComand que esta declarador na classe de conexao

    e referente a qual erro apresenta, o problema é este, não apresenta erros porém não insere e sim a tabela curso possui um id auto_increment

    segunda-feira, 14 de novembro de 2016 14:38
  • Justamente, ele nao insere porque voce nao executa o comando (voce só o define):

    Para que o comando se execute, voce tem que fazer:

    comando.ExecuteNonQuery();

    enquanto voce nao executar o comando acima, a query nao é executada.

    sugestao de codigo:

     public class Crud_curso : Dados_curso
            {
                Conexao conexao = new Conexao();
    
                public Boolean inserirCurso()
                {
                    try
                    {
                        conexao.Banco();
                        conexao.tipo();
                        conexao.comando.CommandText = "insert into curso(NomeCurso) values ('" + curso + "');";
                      conexao.comando.ExecuteNonQuery();//executa a query
                        return true;
    
                    }
                    catch (MySqlException)
                    {
                        return false;
                    }
                }
        }

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    segunda-feira, 14 de novembro de 2016 14:46
    Moderador
  • beleza, antes do return true ?
    segunda-feira, 14 de novembro de 2016 14:47
  • Valeu chamei o método comand antes do return e funcionou valeu mesmo, mas pode me ajudar com um select ? 
    segunda-feira, 14 de novembro de 2016 15:03
  • Aqui tem toda a documentaçao necessaria:

    http://www.akadia.com/services/dotnet_data_reader.html

    http://csharpexamples.com/selectinsertupdatedelete-data-in-mysql-using-c/

    Mas em linhas gerais o codigo fica assim:

    string connectionString = @"server=localhost;userid=user1;password=12345;database=mydb";
     
    MySqlConnection connection = null;
    MySqlDataReader reader = null;
    try
    {
        connection = new MySqlConnection(connectionString);
        connection.Open();
     
        string stm = "SELECT * FROM Customers";
        MySqlDataAdapter dataAdapter = new MySqlDataAdapter();
        dataAdapter.SelectCommand = new MySqlCommand(stm, connection);
        DataTable table = new DataTable();
        dataAdapter.Fill(table);
        return table;
    }
    finally
    {
        if (reader != null)
            reader.Close();
        if (connection != null)
            connection.Close();
    }

    caso precise de parametros no select eu sugiro fazer deste jeito:

    using (MySqlConnection connection = new MySqlConnection("<ConnectionString>"))
                {
                    using (MySqlCommand command = new MySqlCommand("SELECT * FROM Employee WHERE EmployeeId=?EmpId", connection))
                    {
                        //Example
                        command.Parameters.AddWithValue("EmpId", 1);
                        //Simplest way of adding parameter, no need to specify datatype
                        command.Parameters.AddWithValue("<ParameterName>", "<Value>");
                        //Better way of passing parameter
                        command.Parameters.Add("<ParameterName>", MySqlDbType.Int32).Value = "<Value>";
                        //We can pass arry of SqlParameters also
                        command.Parameters.AddRange(new MySqlParameter[] { 
                                                                            new MySqlParameter { 
                                                                                                ParameterName = "<ParameterName>"
                                                                                                , Value = "<Value>"
                                                                                                , MySqlDbType = MySqlDbType.Int32
                                                                                             }
                                                                        }
                                                    );
                        MySqlDataReader reader = command.ExecuteReader();
                    }
                }

    fonte:http://www.a2zmenu.com/blogs/sql/how-to-pass-query-parameter-in-sql-vs-oracle-vs-mysql-in-csharp.aspx

    Caso tenha outra duvida a esse sujeito, sugiro abrir uma nova thread. Isso ajuda a deixar o forum organizado. Obrigado,

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    segunda-feira, 14 de novembro de 2016 16:04
    Moderador