Usuário com melhor resposta
realizar insert a partir de formulario

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(); }
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
----------------------------------------------------------
- Editado William John Adam TrindadeModerator segunda-feira, 14 de novembro de 2016 14:47
- Marcado como Resposta Palomapsj segunda-feira, 14 de novembro de 2016 14:54
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
----------------------------------------------------------
-
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
-
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
----------------------------------------------------------
- Editado William John Adam TrindadeModerator segunda-feira, 14 de novembro de 2016 14:47
- Marcado como Resposta Palomapsj segunda-feira, 14 de novembro de 2016 14:54
-
-
-
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(); } }
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
----------------------------------------------------------
- Editado William John Adam TrindadeModerator segunda-feira, 14 de novembro de 2016 16:06