Problemas com chave estrangeira em uma combobox

10/07/2013

0

Pessoal estou tentando pegar o valor da chave estrangeira que esta na combobox,

estou usando a propriedade SelectedValue me retorna null e da erro de referencia do objeto,

quando eu uso a propriedade selectedIndex o valor vem como zero, nao sei mais o que fazer

se alguém puder me ajudar fico grato!

aqui vai o meu código...

//Rotina para Inserir
        public void inserirVeiculo(int dia, string mes, int ano, int idOrgao, string tipo, int entrada, int saida)
        {

            try
            {
                objComando = new MySqlCommand();
                objComando.Connection = objConexao;
                objConexao.Open();

  
                
                    //libera os objetos
                    objConexao.Close();

                    objComando.CommandText = "insert into veiculo (dia,mes,ano,idOrgao,tipo,entrada,saida) values (@dia, @mes, @ano, @idOrgao, @tipo, @entrada, @saida)";

                    
                    objComando.Parameters.AddWithValue("@dia", dia);
                    objComando.Parameters.AddWithValue("@mes", mes);
                    objComando.Parameters.AddWithValue("@ano", ano);
                    objComando.Parameters.AddWithValue("@idOrgao", idOrgao);
                    objComando.Parameters.AddWithValue("@tipo", tipo);
                    objComando.Parameters.AddWithValue("@entrada", entrada);
                    objComando.Parameters.AddWithValue("@saida", saida);



                    objConexao.Dispose();
                    objConexao.Open();
                    objComando.ExecuteNonQuery();
                    objConexao.Close();
                    MessageBox.Show("Concluído.", "Cadastro");

                
            }
            catch (Exception)
            {
                MessageBox.Show("Erro no banco de dados");
            }

        }

//Cod behind do form

private void toolStripButton3_Click(object sender, EventArgs e)
        {
           
            objVeiculo.inserirVeiculo(int.Parse(comboBoxDia.Text), comboBoxMes.Text, int.Parse(comboBoxAno.Text), int.Parse(comboBoxOrgao.SelectedValue.ToString()), comboBoxTipo.Text, int.Parse(textboxEntrada.Text), int.Parse(textBoxSaida.Text));
        }

//Código que carrega minha combobox através de um DataTable

MySqlConnection comboBox = new MySqlConnection("Persist Security info=false;" +
                                                         "server=localhost;database=sgv;uid=root;pwd='123098'");

            MySqlDataAdapter sql = new MySqlDataAdapter("select nomeOrgao,idOrgao from orgaoautuador where idOrgao= idOrgao", comboBox);

            DataTable dt = new DataTable();

            sql.Fill(dt);

            try
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    comboBoxOrgao.Items.Add(dt.Rows[i]["nomeOrgao"]);
                }
            }
            catch (MySqlException erro)
            {
                throw erro;

            }
            finally
            {
                comboBox.Close();
            }




Matheus

Matheus

Responder

Posts

10/07/2013

Fabio Vianna

boa noite... percebi no seu código que você fecha a conexão antes de iniciar o select, por isso ele fica null...

delete o objConexao.close(); antes do select... pq a conexão deve ser fechada no fim do código.. e ja está dando close no fim...

abs,

espero ter ajudado!
Responder

10/07/2013

Matheus

Amigo o que vc disse nao solucionou me problema,
quando eu mudo propriedade da comboBox para, cmb.selectedIndex.toString() me retorna zero
se eu ponho selectedValue me retorna null

caso puder me dar outra dica fico grato abraço!
Responder

11/07/2013

Fabio Vianna

opa... não pegue pelo index.. pegue o valor pelo cmb.SelectedValue

se o valor do combo for numerico ai vc converte pra int com Convert.ToInt32(cmd.SelectedValue);

abs.
Responder

11/07/2013

Fabio Vianna

se der errado isso...inspeciona o elemento com a ferramenta do chrome ou o navegador que estiver usando e veja se tem value o combobox... se não tiver pega pelo SelectedItem.

abs
Responder

11/07/2013

Matheus

Fabiano...

Eu fiz o que você recomendou usei a conversão assim

Convert.Int32(cmb.SelectedValue)

porém me retorna este erro,
Cannot add or update a child row: a foreign key constraint fails (`sgv`.`veiculo`, CONSTRAINT `fkidOrgao` FOREIGN KEY (`idOrgao`) REFERENCES `orgaoautuador` (`idOrgao`))

ele nao está conseguindo pegar o valor da comboBox nao é isso?

fiz tbm pelo SelectedItem, porem ele pega o nome do campo nao o valor
com isso aponta erro de entrad de caracter incorreto, pois meu campo idOgrao é auto_increment
e um inteiro. eu estou desenvolvendo a aplicação em Windows Forms.


Agradeço novamente pela sua atenção, se puder me ajudar novamente fico grato, abração!
Responder

11/07/2013

Matheus

Fabiano consegui solucionar o meu problema,
eu estava esquecendo de recuperar o valor do item selecionado,
e também modifiquei a lógico para carregar meu comboBox.

aqui vai o código solucionado caso alguém precise.
 //Rotina para carregar a comboBox
        private void PreencheComboBox()
        {
            MySqlConnection comboBox = new MySqlConnection("Persist Security info=false;" +
                                                        "server=localhost;database=sgv;uid=root;pwd='123098'");

            MySqlDataAdapter sql = new MySqlDataAdapter("select idOrgao,nomeOrgao from orgaoautuador order by nomeOrgao", comboBox);

            DataTable dt = new DataTable();



            dt.Columns.Add("idOrgao");
            dt.Columns.Add("nomeOrgao");


            comboBoxOrgao.ValueMember = "idOrgao";
            comboBoxOrgao.DisplayMember = "nomeOrgao";
            sql.Fill(dt);
            comboBoxOrgao.DataSource = dt;
        }


//botao inserir
 private void toolStripButton3_Click(object sender, EventArgs e)
        {   //Estou recuperando o valor passando na comboBox e atribuindo o valor para o campo idSelecionado
            string idSelecionado = comboBoxOrgao.SelectedValue.ToString();

//Usei a propriedade SelectedValue no comboBoxOrgao para apenas pegar o id
            objVeiculo.inserirVeiculo(int.Parse(comboBoxDia.Text), comboBoxMes.Text, int.Parse(comboBoxAno.Text), int.Parse(idSelecionado), comboBoxTipo.Text, int.Parse(textboxEntrada.Text), int.Parse(textBoxSaida.Text));
        }

Responder

14/10/2013

José

Como a duvida inicial foi sanada, estou marcando o tópico como concluído.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar