none
Update is not working with a table with two primary key RRS feed

  • Question

  • Hi folks, 

    I'm trying to update a form with Parent and Child DataGridView - And the comand Update is not working when I try to Update the Child DataGridView, but the Update comand for the Parent DataGridview is working perfectly, which doesn"t have a double primary key. 

    The table has the following fields:

    Cod_Entrada_Titulos_a_Pagar         int primary key

    Cod_Numero_Parcelas_a_Pagar       int primary key

    Numero_Parcela                              numeric(3, 0)
    Data_Vencimento                            datetime
    Valor_Parcela                                  decimal(18, 2)
    Historico                                         varchar(50)
    Cod_Status_Titulo                            int


    Here is the code for Update the table 

    private void btn_atualizarParcela_Click(object sender, EventArgs e) { Data_Agora = DateTime.Now; data_logintxtbox.Text = Data_Agora.ToShortDateString(); login_NameTextBox.Text = Login.DadosGerais.Loginusuario; string constr = @"Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True"; using (SqlConnection conn = new SqlConnection(constr)) if (cod_Entrada_Titulos_a_PagarTextBox2.Text != "" && numero_ParcelaTextBox1.Text != "" && dateTimePicker1.Text != "" && valor_ParcelaTextBox1.Text != "") { try { cmd = new SqlCommand("UPDATE Numero_Parcelas_a_Pagar SET Numero_Parcela=@Numero_Parcela, Data_Vencimento=@Data_Vencimento, Valor_Parcela=@Valor_Parcela, Historico=@Historico, Cod_Status_Titulo=@Cod_Status_Titulo WHERE (Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar) ", conn); conn.Open(); cmd.Parameters.AddWithValue("@Cod_Numero_Parcelas_a_Pagar", IDparcela); Int32 Numero_Parcelas = Int32.Parse(numero_ParcelaTextBox1.Text); cmd.Parameters.AddWithValue("@Numero_Parcela", Numero_Parcelas); DateTime DataVencimento = Convert.ToDateTime(dateTimePicker1.Value); DataVencimento.ToShortDateString(); cmd.Parameters.AddWithValue("@Data_Vencimento", DataVencimento); Decimal ValorParcela = Convert.ToDecimal(valor_ParcelaTextBox1.Text); cmd.Parameters.AddWithValue("@Valor_Parcela", ValorParcela); cmd.Parameters.AddWithValue("@Historico", historicoTextBox1.Text); Int32 StatusTitulo = Int32.Parse(cod_Status_TituloTextBox2.Text); cmd.Parameters.AddWithValue("@Cod_Status_Titulo", StatusTitulo); cmd.ExecuteNonQuery();

    // this message shows but does not update on the table

    MessageBox.Show("Comando atualizar executado!"); } catch(Exception Ex) { MessageBox.Show("Erro! " + Ex.Message); } finally { conn.Close(); }

    // here I Update the Login Date and Login Name which is on the father table try { cmd = new SqlCommand("UPDATE Entrada_Titulos_a_Pagar SET Data_Login=@Data_Login, Login_Name=@Login_Name WHERE Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar", conn); conn.Open(); Data_Agora = Convert.ToDateTime(data_logintxtbox.Text); cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", ID); cmd.Parameters.AddWithValue("@Data_Login", Data_Agora); cmd.Parameters.AddWithValue("@Login_Name", login_NameTextBox.Text); cmd.ExecuteNonQuery(); MessageBox.Show("Dados da Parcela Atualizados com Sucesso!"); } catch (Exception Ex) { MessageBox.Show("Erro! " + Ex.Message); } finally { conn.Close(); ExibirDadosTitulo(); ExibirDadosParcela(); LimparDados(); } } else { MessageBox.Show("Informe todos os Dados Necessários para Atualizar a Parcela!"); } }

    Why is not Updating?

    I did not includede the code to Update the Father's table because is working fine, and I think that is not the problem.

    In case if you need, just tell me.

    Thanks so much for your help.






    Sunday, April 21, 2019 7:27 PM

Answers

  • Bonnie good evening,

    Sorry to answer you this late. I made a change in my system, I included a separate screen to Update the payments.

    I did a DataSet with the wizard, and the command Update is working propely. Everything is fine.

    I won't worry about making only one update or two updates. It will not mather, once it won' be used frequently.

    Lets end this posts. Thank you very much for your support.

    One line solved the problem.

      this.numero_Parcelas_a_PagarTableAdapter.Update(this.numeroParcelasaPagarUpdate.Numero_Parcelas_a_Pagar);

    I appreciated your help.

    best regards.

    Friday, May 10, 2019 1:01 AM

All replies

  • Are you sure you are not updating the wrong record?

                       cmd = new SqlCommand("UPDATE Entrada_Titulos_a_Pagar SET Data_Login=@Data_Login, Login_Name=@Login_Name WHERE Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar", conn);
     

    I would think the login_name should be in the where clause not the set part of the query

    Sunday, April 21, 2019 10:47 PM
  • I don't see where you've added the parameter @Cod_Entrada_Titulos_a_Pagar, but it's in your WHERE clause. I would have thought that would have caused an exception though.

    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Monday, April 22, 2019 12:26 AM
    Moderator
  • Ken, 

    This Update is the second one, where I Upadate the LoginName and DateLogin. 

    The first Update is not working, it doesn't change any field on the SQLServer.

    I included @Cod_Entrada_Titulos_a_Pagar, because gave me a message. Now it is OK.

    But all Messages execute correctly.

    My guess is that could be the two primary key.

    Do you agree, What code should be with two primary key?

    Monday, April 22, 2019 2:45 PM
  • Bonnie, 

    I have already included the @Cod_Entrada_Titulos_a_Pagar and still doen't work.

    Is anything wrong with this code?

     Data_Agora = DateTime.Now;
                    data_logintxtbox.Text = Data_Agora.ToShortDateString();
                    login_NameTextBox.Text = Login.DadosGerais.Loginusuario;
                    Int32 IDCodigoTitulo = 0;
    
                 string constr = @"Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                 using (SqlConnection conn = new SqlConnection(constr))
    
                     if (cod_Entrada_Titulos_a_PagarTextBox2.Text != "" && numero_ParcelaTextBox1.Text != "" && dateTimePicker1.Text != "" && valor_ParcelaTextBox1.Text != "")
                    {
                      try
                      {
                        cmd = new SqlCommand("UPDATE Numero_Parcelas_a_Pagar SET Numero_Parcela=@Numero_Parcela, Data_Vencimento=@Data_Vencimento, Valor_Parcela=@Valor_Parcela, Historico=@Historico, Cod_Status_Titulo=@Cod_Status_Titulo WHERE (Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar) ", conn);
                        conn.Open();
                        cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", IDCodigoTitulo);
                        cmd.Parameters.AddWithValue("@Cod_Numero_Parcelas_a_Pagar", IDparcela);
                        Int32 Numero_Parcelas = Int32.Parse(numero_ParcelaTextBox1.Text);
                        cmd.Parameters.AddWithValue("@Numero_Parcela", Numero_Parcelas);
                        DateTime DataVencimento = Convert.ToDateTime(dateTimePicker1.Value);
                        DataVencimento.ToShortDateString();
                        cmd.Parameters.AddWithValue("@Data_Vencimento", DataVencimento);
                        Decimal ValorParcela = Convert.ToDecimal(valor_ParcelaTextBox1.Text);
                        cmd.Parameters.AddWithValue("@Valor_Parcela", ValorParcela);
                        cmd.Parameters.AddWithValue("@Historico", historicoTextBox1.Text);
                        Int32 StatusTitulo = Int32.Parse(cod_Status_TituloTextBox2.Text);
                        cmd.Parameters.AddWithValue("@Cod_Status_Titulo", StatusTitulo);
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Comando atualizar executado!");
                      }
                      catch(Exception Ex)
                      {
                        MessageBox.Show("Erro! " + Ex.Message);
                      }
                      finally
                      {
                       conn.Close();
                      }

    Thanks a lot for your help.

    Monday, April 22, 2019 2:49 PM
  • A SQL database table can only have one PrimaryKey, so I'm not sure how you even defined the table in SQL Server to have two primary keys. What you actually *should* have is a composite primary key. In the CREATE TABLE sql command it would be defined like this:

    CREATE TABLE Numero_Parcelas_a_Pagar
    (
        Cod_Numero_Parcelas_a_Pagar INT NOT NULL,
        Cod_Entrada_Titulos_a_Pagar INT NOT NULL,
        PRIMARY KEY (Cod_Numero_Parcelas_a_Pagar, Cod_Entrada_Titulos_a_Pagar),
        -- the rest of the table definition follows
        -- ...
    )

    Perhaps you already have it this way, but from your previous description, it doesn't sound like it.  Note that there are two important parts to this, the composite Primary Key and the fact that both of the key columns are specified as NOT NULL. Check on your database schema, perhaps you have NULLs in your key columns?


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Monday, April 22, 2019 3:35 PM
    Moderator
  • Hi F.oliveirarocha, 

    Thank you for posting here. 

    First, please refer to the following code for setting up two primary keys in sql.

    Change the table structure:

     
    CREATE TABLE Table_Name
    (
        Field1 INT NOT NULL,
        Field2 INT NOT NULL,
        Field3 ......
        FieldN ......
    )
    GO
     
    ALTER   TABLE   Table_Name   WITH   NOCHECK   ADD     
     
    CONSTRAINT   [PK_Table_Name]   PRIMARY   KEY  NONCLUSTERED  (  [Field1],[Field2]   )   
     
    GO

    More details:

    https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms189862(v=sql.105)

    And I didn't see how to read the data in your code. In order to solve the problem more accurately ,could you provide the complete code?

    Best regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    Tuesday, April 23, 2019 5:32 AM
    Moderator
  • OK. I will chek that, it might be the problem.

    I do have a composite Primary key, The SQL Server is marked with the key, both fields.

    I  included the update on the other field, cod_Entrada_Titulos_a_PagarTextBox, but did not worked as well.

    I will have to change the tables.

    I've seen some code different do Update a table composite with two keys, something like:

    UPDATE MyTable M SET M.Matched = 1 WHERE EXISTS ( SELECT 1 FROM OtherTable O WHERE O.UserID= M.UserID AND O.Account = M.Account)

    and I don´t know how to do that, and if it is the case for this Update.

    Tuesday, April 23, 2019 1:52 PM
  • Wendy god morning,

    here goes de complete code:

    It still does not update the private void btn_atualizarParcela_Click(object sender, EventArgs e)

    I sounds like a SQL probelm.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Data.OleDb;
    using System.Globalization;
    using sistema.DAL;
    
    namespace SGFRenaissance
    {
        public partial class CadastroTitulosaPagar : Form
        {
    
            SqlConnection conn = new SqlConnection("Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True");
            SqlCommand cmd;
            SqlDataAdapter adapt;
            Int32 ID = 0;
            Int32 IDparcela = 0;
            private DateTime Data_Agora;
            private int ultimoCodigoEntradaTP = 0;
    
            public CadastroTitulosaPagar()
            {
                InitializeComponent();
                ExibirDadosTitulo();
                ExibirDadosParcela();
                DataGridViewTitulo.AllowUserToAddRows = false;
                DataGridViewParcela.AllowUserToAddRows = false;
                int currentIndex;
                int flag = -1;
            }
    
            private void ExibirDadosTitulo()
            {
                try
                {
                    conn.Open();
                    DataTable Dt = new DataTable();
                    adapt = new SqlDataAdapter("Select * from Entrada_Titulos_a_Pagar", conn);
                    adapt.Fill(Dt);
                    DataGridViewTitulo.DataSource = Dt;
                    DataGridViewTitulo.DataSource = entradaTitulosaPagarBindingSource;
                }
                catch (Exception Ex)
                {
                    MessageBox.Show("Erro! " + Ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
    
            private void ExibirDadosParcela()
            {
                try
                {
                    conn.Open();
                    DataTable Dt = new DataTable();
                    adapt = new SqlDataAdapter("Select * from Numero_Parcelas_a_Pagar", conn);
                    adapt.Fill(Dt);
                    DataGridViewParcela.DataSource = Dt;
                }
                catch (Exception Ex)
                {
                    MessageBox.Show("Erro! " + Ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
    
            private void LimparDados()
            {           
                cod_Entr_Tit_a_Pagartextbox.Text = "";
                Cod_FornecedorTextbox.Text = "";
                textBox_Fornecedor.Text = "";
                TextBox_Cod_CentroCustos.Text = "";
                TexBoxNome_CentroCustos.Text = "";
                cod_Status_TituloTextBox.Text = "";
                Status_Titulo_Textbox.Text = "";
                cod_DespesaTextBox.Text = "";
                descricao_Despesa_textBox.Text = "";
                Numero_Titulo.Text = "";
                numero_ParcelasTextBox.Text = "";
                observacaoTextBox.Text = "";
                valor_TituloTextBox.Text = "";
                valor_Pago_a_VistaTextBox.Text = "";
                acrescimosTextBox.Text = "";
                descontosTextBox.Text = "";
                saldoTextBox.Text = "";
                historico_TituloTextBox.Text = "";
                data_logintxtbox.Text = "";
                login_NameTextBox.Text = "";
                // Limpar campo de parcelas 
                cod_Entrada_Titulos_a_PagarTextBox2.Text = "";
                numero_ParcelaTextBox1.Text = "";
              //dateTimePicker1.Text = "";
                valor_ParcelaTextBox1.Text = "";
                cod_Status_TituloTextBox2.Text = "";
                historicoTextBox1.Text = "";
            }
               private void btn_fechar_Click(object sender, EventArgs e)
            {
                if (MessageBox.Show("Deseja Sair do Forumulário ?", "Cadastrar Títulos a Pagar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    conn.Close();
                    this.Close();
                }
                else
                {
                    btn_fechar.Focus();
                }
            }
    
            private void btn_Novo_Click(object sender, EventArgs e)
            {
    
                LimparDados();
                cod_Entr_Tit_a_Pagartextbox.Enabled = true;
                Cod_FornecedorTextbox.Enabled = true;
                textBox_Fornecedor.Enabled = true;
                TextBox_Cod_CentroCustos.Enabled = true;
                TexBoxNome_CentroCustos.Enabled = true;
                cod_Status_TituloTextBox.Enabled = true;
                Status_Titulo_Textbox.Enabled = true;
                cod_DespesaTextBox.Enabled = true;
                descricao_Despesa_textBox.Enabled = true;
                Numero_Titulo.Enabled = true;
                DataDocumentodateTimePicker1.CustomFormat = "   ";
                DataDocumentodateTimePicker1.Enabled = true;
                DataVencimentodateTimePicker.CustomFormat = "   ";
                DataVencimentodateTimePicker.Enabled = true;
                numero_ParcelasTextBox.Enabled = true;
                observacaoTextBox.Enabled = true;
                valor_TituloTextBox.Enabled = true;
                valor_Pago_a_VistaTextBox.Enabled = true;
                acrescimosTextBox.Enabled = true;
                descontosTextBox.Enabled = true;
                saldoTextBox.Enabled = true;
                historico_TituloTextBox.Enabled = true;
                data_logintxtbox.Enabled = true;
                login_NameTextBox.Enabled = true;
                // Limpar campo de parcelas 
                cod_Entrada_Titulos_a_PagarTextBox2.Enabled = true;
                numero_ParcelaTextBox1.Enabled = true;
                dateTimePicker1.Enabled = true;
                valor_ParcelaTextBox1.Enabled = true;
                cod_Status_TituloTextBox2.Enabled = true;
                historicoTextBox1.Enabled = true;
                btn_salvar.Enabled = true;
                btn_atualizar.Enabled = false;
            }
    
            private void btn_salvar_Click(object sender, EventArgs e)
            {
                Data_Agora = DateTime.Now;
                data_logintxtbox.Text = Data_Agora.ToLongDateString();
                login_NameTextBox.Text = Login.DadosGerais.Loginusuario;
    
                if (Cod_FornecedorTextbox.Text !="" && TextBox_Cod_CentroCustos.Text!="" && cod_Status_TituloTextBox.Text !="" && cod_DespesaTextBox.Text !="" &&  Numero_Titulo.Text != "" && valor_TituloTextBox.Text !=""  
                    && acrescimosTextBox.Text !="" && descontosTextBox.Text !="" && valor_Pago_a_VistaTextBox.Text !="")
                {
                    try
                    {
                        cmd = new SqlCommand("INSERT INTO Entrada_Titulos_a_Pagar(Cod_Fornecedor, Numero_Documento, Data_Documento, Data_Vencimento, Valor_Titulo,"
                      + " Valor_Pago_a_Vista, Acrescimos, Descontos, Saldo, Numero_Parcelas, Cod_Centro_Custos, Cod_Status_Titulo, Cod_Despesa, Historico_Titulo, Observacao, Data_Login, Login_Name)Values(@Cod_Fornecedor,@Numero_Documento,"
                      + " @Data_Documento,@Data_Vencimento,@Valor_Titulo,@Valor_Pago_a_Vista,@Acrescimos,@Descontos,@Saldo,@Numero_Parcelas,@Cod_Centro_Custos,@Cod_Status_Titulo,@Cod_Despesa,@Historico_Titulo,@Observacao,@Data_Login,@Login_Name)", conn);
                        conn.Open();
    
                        Int32 Cod_Fornecedor = Int32.Parse(Cod_FornecedorTextbox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Fornecedor", Cod_Fornecedor);
                        cmd.Parameters.AddWithValue("@Numero_Documento", Numero_Titulo.Text);
                        cmd.Parameters.AddWithValue("@Data_Documento", DataDocumentodateTimePicker1.Value);
                        cmd.Parameters.AddWithValue("@Data_Vencimento", DataVencimentodateTimePicker.Value);
                        decimal valor_Titulo = decimal.Parse(valor_TituloTextBox.Text);
                        cmd.Parameters.AddWithValue("@Valor_Titulo", valor_Titulo);
                        decimal valor_Pago_a_Vista = decimal.Parse(valor_Pago_a_VistaTextBox.Text);
                        cmd.Parameters.AddWithValue("@Valor_Pago_a_Vista", valor_Pago_a_Vista);
                        decimal Acrescimos = decimal.Parse(acrescimosTextBox.Text);
                        cmd.Parameters.AddWithValue("@Acrescimos", Acrescimos);
                        decimal Descontos = decimal.Parse(descontosTextBox.Text);
                        cmd.Parameters.AddWithValue("@Descontos", Descontos);
                        decimal Saldo = decimal.Parse(saldoTextBox.Text);
                        cmd.Parameters.AddWithValue("@Saldo", Saldo);
                        Int32 Numero_Parcelas = Int32.Parse(numero_ParcelasTextBox.Text);
                        cmd.Parameters.AddWithValue("@Numero_Parcelas", Numero_Parcelas);
                        Int32 Cod_Centro_Custos = Int32.Parse(TextBox_Cod_CentroCustos.Text);
                        cmd.Parameters.AddWithValue("@Cod_Centro_Custos", Cod_Centro_Custos);
                        Int32 Cod_Status_Titulo = Int32.Parse(cod_Status_TituloTextBox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Status_Titulo", Cod_Status_Titulo);
                        Int32 Cod_Despesa = Int32.Parse(cod_DespesaTextBox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Despesa", Cod_Despesa);
                        cmd.Parameters.AddWithValue("@Historico_Titulo", historico_TituloTextBox.Text);
                        cmd.Parameters.AddWithValue("@Observacao", observacaoTextBox.Text);
                        DateTime dataagora = Convert.ToDateTime(data_logintxtbox.Text);
                        cmd.Parameters.AddWithValue("@Data_Login", dataagora);
                        cmd.Parameters.AddWithValue("@Login_Name", login_NameTextBox.Text); 
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Dados do Título Incluídos com Sucesso!");
                    }
                    catch (Exception Ex)
                    {
                        MessageBox.Show("Erro! " + Ex.Message);
                    }
                    finally
                    {
                        conn.Close();
                        ExibirDadosTitulo();
                        ExibirDadosParcela();
                        LimparDados();
                    }
                  } 
                else
                {
                    MessageBox.Show("Informe todos os Dados necessários para incluir o Título");
                } 
            }
    
            private void btn_atualizar_Click(object sender, EventArgs e)
            {
                Data_Agora = DateTime.Now;
                data_logintxtbox.Text = Data_Agora.ToShortDateString(); 
                login_NameTextBox.Text = Login.DadosGerais.Loginusuario;
                string constr = @"Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                using (SqlConnection conn = new SqlConnection(constr))
    
                if (Cod_FornecedorTextbox.Text !="" && TextBox_Cod_CentroCustos.Text!="" && cod_Status_TituloTextBox.Text !="" && cod_DespesaTextBox.Text !="" &&  Numero_Titulo.Text != "" && valor_TituloTextBox.Text !="")
                {
                    try
                    {
                        cmd = new SqlCommand("UPDATE Entrada_Titulos_a_Pagar SET Cod_Fornecedor=@Cod_Fornecedor, Numero_Documento=@Numero_Documento, Data_Documento=@Data_Documento, Data_Vencimento=@Data_Vencimento, Valor_Titulo=@Valor_Titulo, Valor_Pago_a_Vista=@Valor_Pago_a_Vista, Acrescimos=@Acrescimos, Descontos=@Descontos, Saldo=@Saldo, Numero_Parcelas=@Numero_Parcelas, Cod_Centro_Custos=@Cod_Centro_Custos, Cod_Status_Titulo=@Cod_Status_Titulo, Cod_Despesa=@Cod_Despesa, Historico_Titulo=@Historico_Titulo, Observacao=@Observacao, Data_Login=@Data_Login, Login_Name=@Login_Name WHERE Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar", conn);
                        conn.Open();
    
                        cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", ID);
                        Int32 Cod_Fornecedor = Int32.Parse(Cod_FornecedorTextbox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Fornecedor", Cod_Fornecedor);
                        cmd.Parameters.AddWithValue("@Numero_Documento", Numero_Titulo.Text);
                        cmd.Parameters.AddWithValue("@Data_Documento", DataDocumentodateTimePicker1.Value);
                        cmd.Parameters.AddWithValue("@Data_Vencimento", DataVencimentodateTimePicker.Value);
                        decimal valor_Titulo = decimal.Parse(valor_TituloTextBox.Text);
                        cmd.Parameters.AddWithValue("@Valor_Titulo", valor_Titulo);
                        decimal valor_Pago_a_Vista = decimal.Parse(valor_Pago_a_VistaTextBox.Text);
                        cmd.Parameters.AddWithValue("@Valor_Pago_a_Vista", valor_Pago_a_Vista);
                        decimal Acrescimos = decimal.Parse(acrescimosTextBox.Text);
                        cmd.Parameters.AddWithValue("@Acrescimos", Acrescimos);
                        decimal Descontos = decimal.Parse(descontosTextBox.Text);
                        cmd.Parameters.AddWithValue("@Descontos", Descontos);
                        decimal Saldo = decimal.Parse(saldoTextBox.Text);
                        cmd.Parameters.AddWithValue("@Saldo", Saldo);
                        Int32 Numero_Parcelas = Int32.Parse(numero_ParcelasTextBox.Text);
                        cmd.Parameters.AddWithValue("@Numero_Parcelas", Numero_Parcelas);
                        Int32 Cod_Centro_Custos = Int32.Parse(TextBox_Cod_CentroCustos.Text);
                        cmd.Parameters.AddWithValue("@Cod_Centro_Custos", Cod_Centro_Custos);
                        Int32 Cod_Status_Titulo = Int32.Parse(cod_Status_TituloTextBox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Status_Titulo", Cod_Status_Titulo);
                        Int32 Cod_Despesa = Int32.Parse(cod_DespesaTextBox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Despesa", Cod_Despesa);
                        cmd.Parameters.AddWithValue("@Historico_Titulo", historico_TituloTextBox.Text);
                        cmd.Parameters.AddWithValue("@Observacao", observacaoTextBox.Text);
                        DateTime dataagora = Convert.ToDateTime(data_logintxtbox.Text);
                        cmd.Parameters.AddWithValue("@Data_Login", dataagora);
                        cmd.Parameters.AddWithValue("@Login_Name", login_NameTextBox.Text);
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Show! Dados do Título Atualizados com Sucesso!");
    
                    }
                    catch(Exception Ex)
                    {
                        MessageBox.Show("Erro! " + Ex.Message);
                    }
                    finally
                    {
                        conn.Close();
                        ExibirDadosTitulo();
                        ExibirDadosParcela();
                        LimparDados();
                    }
                }
                else
                {
                    MessageBox.Show("Informe todos os Dados Necessários para Atualizar o Título!");
                }
            }
            int currentIndex;
            int flag = -1;
            private void CadastroTitulosaPagar_Load(object sender, EventArgs e)
            {
        //      Colocar Foco no Form_Load
                Cod_FornecedorTextbox.Focus();
       //       Desabilitar os botões no Form_Load
                btn_salvar.Enabled = false;
                btn_atualizar.Enabled = false;
                btn_deletar.Enabled = false;
                btn_AdicionarParcela.Enabled = false;
                btn_atualizarParcela.Enabled = false;
                btn_InserirParcela.Enabled = false;
       //       Desabilitar campos - Textboxes - do Título
                cod_Entr_Tit_a_Pagartextbox.Enabled = false;
                Cod_FornecedorTextbox.Enabled = false;
                textBox_Fornecedor.Enabled = false;
                TextBox_Cod_CentroCustos.Enabled = false;
                TexBoxNome_CentroCustos.Enabled = false;
                cod_Status_TituloTextBox.Enabled = false;
                Status_Titulo_Textbox.Enabled = false;
                cod_DespesaTextBox.Enabled = false;
                descricao_Despesa_textBox.Enabled = false;
                Numero_Titulo.Enabled = false;
                DataDocumentodateTimePicker1.Enabled = false;
                DataVencimentodateTimePicker.Enabled = false;
                DataDocumentodateTimePicker1.CustomFormat = null;
                DataVencimentodateTimePicker.CustomFormat = null;
                numero_ParcelasTextBox.Enabled = false;
                observacaoTextBox.Enabled = false;
                valor_TituloTextBox.Enabled = false;
                valor_Pago_a_VistaTextBox.Enabled = false;
                acrescimosTextBox.Enabled = false;
                descontosTextBox.Enabled = false;
                saldoTextBox.Enabled = false;
                historico_TituloTextBox.Enabled = false;
                data_logintxtbox.Enabled = false;
                login_NameTextBox.Enabled = false;
          //    Desabilitar campos - Textboxes - da Parcela
                cod_Entrada_Titulos_a_PagarTextBox2.Enabled = false;
                numero_ParcelaTextBox1.Enabled = false;
                dateTimePicker1.Enabled = false;
                valor_ParcelaTextBox1.Enabled = false;
                cod_Status_TituloTextBox2.Enabled = false;
                historicoTextBox1.Enabled = false;
    
                // TODO: This line of code loads data into the 'entradaTitulosaPagarDGV.Entrada_Titulos_a_Pagar' table. You can move, or remove it, as needed.
                this.entrada_Titulos_a_PagarTableAdapter.Fill(this.entradaTitulosaPagarDGV.Entrada_Titulos_a_Pagar);
                ExibirDadosTitulo();
                ExibirDadosParcela();
                string constr = @"Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                using (SqlConnection conn = new SqlConnection(constr))
                {
                    SqlDataAdapter sda = new SqlDataAdapter("Select * From Entrada_Titulos_a_Pagar", conn);
                    DataSet Ds = new DataSet();
                    sda.Fill(Ds, "T1");
                    DataGridViewTitulo.DataSource = Ds.Tables["T1"];
                }
                // Bind the "SelectionChanged" here
                DataGridViewTitulo.SelectionChanged += DataGridViewTitulo_SelectionChanged;
                GetDetails();
                
            }
    
            void GetDetails()
            {
                int currentId;
                string constr = @"Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                int index = DataGridViewTitulo.CurrentCell.RowIndex;
                currentId = Convert.ToInt32(DataGridViewTitulo.Rows[index].Cells["Cod_Id"].Value);
                using (SqlConnection conn = new SqlConnection(constr))
                {
                    var select = "Select * From Numero_Parcelas_a_Pagar Where Cod_Entrada_Titulos_a_Pagar=" + currentId;
                    SqlDataAdapter sda = new SqlDataAdapter(select, conn);
                    DataSet Ds = new DataSet();
                    sda.Fill(Ds, "T2");
                    DataGridViewParcela.DataSource = Ds.Tables["T2"];
                }
            }
    
            private void DataGridViewTitulo_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                try
                {
            //      Habilitar campos do formulário
                    cod_Entr_Tit_a_Pagartextbox.Enabled = true;
                    Cod_FornecedorTextbox.Enabled = true;
                    textBox_Fornecedor.Enabled = true;
                    TextBox_Cod_CentroCustos.Enabled = true;
                    TexBoxNome_CentroCustos.Enabled = true;
                    cod_Status_TituloTextBox.Enabled = true;
                    Status_Titulo_Textbox.Enabled = true;
                    cod_DespesaTextBox.Enabled = true;
                    descricao_Despesa_textBox.Enabled = true;
                    Numero_Titulo.Enabled = true;
                    DataDocumentodateTimePicker1.Value.ToShortDateString();
                    DataVencimentodateTimePicker.Value.ToShortTimeString();
                    numero_ParcelasTextBox.Enabled = true;
                    observacaoTextBox.Enabled = true;
                    valor_TituloTextBox.Enabled = true;
                    valor_Pago_a_VistaTextBox.Enabled = true;
                    acrescimosTextBox.Enabled = true;
                    descontosTextBox.Enabled = true;
                    saldoTextBox.Enabled = true;
                    historico_TituloTextBox.Enabled = true;
                    data_logintxtbox.Enabled = true;
                    login_NameTextBox.Enabled = true;
                    // Habilitar campos das parcelas 
                    cod_Entrada_Titulos_a_PagarTextBox2.Enabled = true;
                    numero_ParcelaTextBox1.Enabled = true;
                    dateTimePicker1.Enabled = true;
                    valor_ParcelaTextBox1.Enabled = true;
                    cod_Status_TituloTextBox2.Enabled = true;
                    historicoTextBox1.Enabled = true;
                    // Habilitar botão Atualizar
                    btn_atualizar.Enabled = true;
                    // Passar valores do DataGridView para os Textboxes
                    cod_Entr_Tit_a_Pagartextbox.Text = DataGridViewTitulo.CurrentRow.Cells[0].Value.ToString();
                    ID = Convert.ToInt32(DataGridViewTitulo.Rows[e.RowIndex].Cells[0].Value.ToString());
                    Cod_FornecedorTextbox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[1].Value.ToString();
                    Numero_Titulo.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[2].Value.ToString();
                    DataDocumentodateTimePicker1.Value = Convert.ToDateTime(DataGridViewTitulo.Rows[e.RowIndex].Cells[3].Value);
                    DataVencimentodateTimePicker.Value = Convert.ToDateTime(DataGridViewTitulo.Rows[e.RowIndex].Cells[4].Value);
                    valor_TituloTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[5].Value.ToString();
                    valor_Pago_a_VistaTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[6].Value.ToString();
                    acrescimosTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[7].Value.ToString();
                    descontosTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[8].Value.ToString();
                    saldoTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[9].Value.ToString();
                    numero_ParcelasTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[10].Value.ToString();
                    TextBox_Cod_CentroCustos.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[11].Value.ToString();
                    cod_Status_TituloTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[12].Value.ToString();
                    cod_DespesaTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[13].Value.ToString();
                    historico_TituloTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[14].Value.ToString();
                    observacaoTextBox.Text = DataGridViewTitulo.Rows[e.RowIndex].Cells[15].Value.ToString();
                 
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show("Erro!" + ex.Message);
                }
    
            }
    
            private void DataGridViewTitulo_SelectionChanged(object sender, EventArgs e)
            {
                if (flag == 1)
                {
                    GetDetails();
                }
            }
    
            private void btn_proximo_Click(object sender, EventArgs e)
            {
                // Check the index, and move the focus
                int currentIndex;
                currentIndex = DataGridViewTitulo.CurrentRow.Index;
                if (currentIndex < DataGridViewTitulo.Rows.Count - 1)
                {
                    DataGridViewTitulo.CurrentCell = DataGridViewTitulo.Rows[currentIndex + 1].Cells[0];
                    DataGridViewTitulo.CurrentCell.Selected = false;
                    flag *= -1;
                    DataGridViewTitulo.Rows[currentIndex + 1].Cells[0].Selected = true;
                    this.DataGridViewTitulo.DataSource = this.entradaTitulosaPagarBindingSource;
                    
                }
            }
    
            private void btn_voltar_Click(object sender, EventArgs e)
            {
                // Check the index, and move the focus
                int currentIndex;
                currentIndex = DataGridViewTitulo.CurrentCell.RowIndex;
                if (currentIndex > 0)
                {
                    DataGridViewTitulo.CurrentCell = DataGridViewTitulo.Rows[currentIndex - 1].Cells[0];
                    DataGridViewTitulo.CurrentCell.Selected = false;
                    flag *= -1;
                    DataGridViewTitulo.Rows[currentIndex - 1].Cells[0].Selected = true;
                    this.DataGridViewTitulo.DataSource = this.entradaTitulosaPagarBindingSource;
                }
            }
    
            private void btn_Editar_Click(object sender, EventArgs e)
            {
                cod_Entr_Tit_a_Pagartextbox.Enabled = true;
                Cod_FornecedorTextbox.Enabled = true;
                textBox_Fornecedor.Enabled = true;
                TextBox_Cod_CentroCustos.Enabled = true;
                TexBoxNome_CentroCustos.Enabled = true;
                cod_Status_TituloTextBox.Enabled = true;
                Status_Titulo_Textbox.Enabled = true;
                cod_DespesaTextBox.Enabled = true;
                descricao_Despesa_textBox.Enabled = true;
                Numero_Titulo.Enabled = true;
                DataDocumentodateTimePicker1.Value.ToShortDateString();
                DataVencimentodateTimePicker.Value.ToShortTimeString();
                numero_ParcelasTextBox.Enabled = true;
                observacaoTextBox.Enabled = true;
                valor_TituloTextBox.Enabled = true;
                valor_Pago_a_VistaTextBox.Enabled = true;
                acrescimosTextBox.Enabled = true;
                descontosTextBox.Enabled = true;
                saldoTextBox.Enabled = true;
                historico_TituloTextBox.Enabled = true;
                data_logintxtbox.Enabled = true;
                login_NameTextBox.Enabled = true;
                // Limpar campo de parcelas 
                cod_Entrada_Titulos_a_PagarTextBox2.Enabled = true;
                numero_ParcelaTextBox1.Enabled = true;
                dateTimePicker1.Enabled = true;
                valor_ParcelaTextBox1.Enabled = true;
                cod_Status_TituloTextBox2.Enabled = true;
                historicoTextBox1.Enabled = true;
            }
    
            private void btn_deletar_Click(object sender, EventArgs e)
            {
                if (ID != 0)
                {
                    if (MessageBox.Show("Deseja deletar este Título ?","Cadastro de Títulos a Pagar",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
                    {
                        try
                        {
                            cmd = new SqlCommand("DELETE Entrada_Titulos_a_Pagar WHERE Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar", conn);
                            conn.Open();
                            cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", ID);
                            cmd.ExecuteNonQuery();
                            MessageBox.Show("Título Deletado com Sucesso...!");
                        }
                        catch (Exception Ex)
                        {
                            MessageBox.Show("Erro! " + Ex.Message);
                        }
                        finally
                        {
                            conn.Close();
                            ExibirDadosTitulo();
                            ExibirDadosParcela();
                            LimparDados();
                        }
                    }
    
                }
            }
    
            private void DataGridViewParcela_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
         //     Habilitar campos da Parcela
                cod_Entrada_Titulos_a_PagarTextBox2.Enabled = true;
                cod_Numero_Parcelas_a_PagarTextBox.Enabled = true;
                numero_ParcelaTextBox1.Enabled = true;
                dateTimePicker1.Enabled = true;
                valor_ParcelaTextBox1.Enabled = true;
                cod_Status_TituloTextBox2.Enabled = true;
                historicoTextBox1.Enabled = true;
        //      Transferir dados do DataGridView para os TextBoxes
                cod_Entrada_Titulos_a_PagarTextBox2.Text = DataGridViewParcela.CurrentRow.Cells[0].Value.ToString();
                IDparcela = Convert.ToInt32(DataGridViewParcela.Rows[e.RowIndex].Cells[0].Value.ToString());
                cod_Numero_Parcelas_a_PagarTextBox.Text = DataGridViewParcela.CurrentRow.Cells[1].Value.ToString();
                numero_ParcelaTextBox1.Text = DataGridViewParcela.CurrentRow.Cells[2].Value.ToString();
                dateTimePicker1.Text = DataGridViewParcela.CurrentRow.Cells[3].Value.ToString();
                valor_ParcelaTextBox1.Text =  DataGridViewParcela.CurrentRow.Cells[4].Value.ToString();
                historicoTextBox1.Text = DataGridViewParcela.CurrentRow.Cells[5].Value.ToString();
                cod_Status_TituloTextBox2.Text = DataGridViewParcela.CurrentRow.Cells[6].Value.ToString();
        //      Habilitar botão Atualizar Parcela
                btn_atualizarParcela.Enabled = true;
    
            }
    
            private void btn_atualizarParcela_Click(object sender, EventArgs e)
            {
                    Data_Agora = DateTime.Now;
                    data_logintxtbox.Text = Data_Agora.ToShortDateString();
                    login_NameTextBox.Text = Login.DadosGerais.Loginusuario;
    
                 string constr = @"Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                 using (SqlConnection conn = new SqlConnection(constr))
    
                     if (cod_Entrada_Titulos_a_PagarTextBox2.Text != "" && numero_ParcelaTextBox1.Text != "" && dateTimePicker1.Text != "" && valor_ParcelaTextBox1.Text != "")
                    {
                      try
                      {
                        cmd = new SqlCommand("UPDATE Numero_Parcelas_a_Pagar SET Numero_Parcela=@Numero_Parcela, Data_Vencimento=@Data_Vencimento, Valor_Parcela=@Valor_Parcela, Historico=@Historico, Cod_Status_Titulo=@Cod_Status_Titulo WHERE (Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar) ", conn);
                        conn.Open();
                        Int32 IDCodigoTitulo = Int32.Parse(cod_Entrada_Titulos_a_PagarTextBox2.Text);
                        cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", IDCodigoTitulo);
                        cmd.Parameters.AddWithValue("@Cod_Numero_Parcelas_a_Pagar", IDparcela);
                        Int32 Numero_Parcelas = Int32.Parse(numero_ParcelaTextBox1.Text);
                        cmd.Parameters.AddWithValue("@Numero_Parcela", Numero_Parcelas);
                        DateTime DataVencimento = Convert.ToDateTime(dateTimePicker1.Value.Date);
                        DataVencimento.ToShortDateString();
                        cmd.Parameters.AddWithValue("@Data_Vencimento", DataVencimento);
                        Decimal ValorParcela = Convert.ToDecimal(valor_ParcelaTextBox1.Text);
                        cmd.Parameters.AddWithValue("@Valor_Parcela", ValorParcela);
                        cmd.Parameters.AddWithValue("@Historico", historicoTextBox1.Text);
                        Int32 StatusTitulo = Int32.Parse(cod_Status_TituloTextBox2.Text);
                        cmd.Parameters.AddWithValue("@Cod_Status_Titulo", StatusTitulo);
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Comando atualizar executado!");
                      }
                      catch(Exception Ex)
                      {
                        MessageBox.Show("Erro! " + Ex.Message);
                      }
                      finally
                      {
                       conn.Close();
                      }
                      
                      try
                      {
                        cmd = new SqlCommand("UPDATE Entrada_Titulos_a_Pagar SET Data_Login=@Data_Login, Login_Name=@Login_Name WHERE Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar", conn);
                        conn.Open();
                        Data_Agora = Convert.ToDateTime(data_logintxtbox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", ID);
                        cmd.Parameters.AddWithValue("@Data_Login", Data_Agora);
                        cmd.Parameters.AddWithValue("@Login_Name", login_NameTextBox.Text);
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Dados da Parcela Atualizados com Sucesso!");
                       }
                       catch (Exception Ex)
                       {
                        MessageBox.Show("Erro! " + Ex.Message);
                       }
                       finally
                       {
                        conn.Close();
                        ExibirDadosTitulo();
                        ExibirDadosParcela();
                        LimparDados();
                       }
                  }
                     else
                     {
                       MessageBox.Show("Informe todos os Dados Necessários para Atualizar a Parcela!");
                     }
            }
        }
    }
    
    Thanks for your help.

    Tuesday, April 23, 2019 2:00 PM
  • Have you checked yet whether those columns used in the composite Primary key are defined to not allow NULLs? That same "rule" would apply to any column used for a PrimaryKey ... PrimaryKeys should never allow NULL.

    The code for the btn_atualizarParcela_Click, shows that you are updating two different tables. Which update is not working? Or are they both not working? Have you verified (through debugging) that the values you are setting for the Parameters in your WHERE clause are what you're expecting them to be?

    In other words, the first update is for the Numero_Parcelas_a_Pagar table. The WHERE clause is looking at the @Cod_Numero_Parcelas_a_Pagar and @Cod_Entrada_Titulos_a_Pagar parameters. You are setting those parameters like this:

    cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", IDCodigoTitulo);
    cmd.Parameters.AddWithValue("@Cod_Numero_Parcelas_a_Pagar", IDparcela);

    Are the values in IDCodigoTitulo and IDparcela valid and do they appear in one row in the Numero_Parcelas_a_Pagar database table? (you could do a SELECT query in SSMS to see).

    The same question applies to the other table you're trying to update, Entrada_Titulos_a_Pagar. The WHERE clause is looking at the @Cod_Entrada_Titulos_a_Pagar parameter, which you've set to a different value for UPDATEing this table than for the UPDATE for the first table (which may be OK, since I don't have any idea about your data), but you should verify this too:

    cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", ID);

    Is the value in ID valid and does it appear in at least one row in the Entrada_Titulos_a_Pagar database table?


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Tuesday, April 23, 2019 3:34 PM
    Moderator
  • Bonnie good afeternoon,

    thanks for your effort trying to solve this problem.

    Answering by your paragraph:

    The columns on the Datatable both key are not null. Which is OK.

    Cod_Numero_Parcelas_a_Pagar  - is Identity 1. 

    You are correct, I'm Updating two different tables, and both are not working.

    You found the problem. Let's see if you can help me.

    "The WHERE clause is looking at the @Cod_Numero_Parcelas_a_Pagar and @Cod_Entrada_Titulos_a_Pagar parameters. You are setting those parameters like this:" 

    This @Cod_Entrada_Titulos_a_Pagar, IDCodigoTitulo -> is correct and is receiving the correct value, and 

    @Cod_Numero_Parcelas_a_Pagar -> is not correct and is receiving the  Value of IDParcela.

    All Parameters has been done with the correct values.

    The problem is:

    IDParcela is receiving the same value of IDCodigoTitulo  - I don't know why.

    IDCodigoTitulo = IDParcela - which is not true.

    IDCodigoTitulo could be 8  and 

    IDParecela could be 2  - for example.

    That is why is not working I guess. 

    The First Updatde worked fine, when the  both columns were correct.

    IDCodigoTitulo was 10 and IDParcela was 10 (I had these values at the table) the Update made all changes.

    The second Update did not work. But the code seems to be Ok, as  I posted above with the entire code.

    private void btn_atualizar_Click(object sender, EventArgs e)  -> this update  is working. Posted with the entire code - For Wendy.

    The command  Update, is not finding the correct collumn to do the Update, It is receiving a the same number of the IDCodigoTitulo,

    even though the value of cod_Entrada_Titulos_a_PagarTextBox2.Text is correct.


    Follows the code:

       private void btn_atualizarParcela_Click(object sender, EventArgs e)
            {
                    Data_Agora = DateTime.Now;
                    data_logintxtbox.Text = Data_Agora.ToShortDateString();
                    login_NameTextBox.Text = Login.DadosGerais.Loginusuario;
                    Int32 IDParcela = 0;
                 string constr = @"Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                 using (SqlConnection conn = new SqlConnection(constr))
    
                     if (cod_Entrada_Titulos_a_PagarTextBox2.Text != "" && Cod_Numero_Parcelas_a_PagarTextBox.Text != "" && numero_ParcelaTextBox1.Text != "" && dateTimePicker1.Text != "" && valor_ParcelaTextBox1.Text != "")
                    {
                      try
                      {
                          cmd = new SqlCommand("UPDATE Numero_Parcelas_a_Pagar SET Numero_Parcela=@Numero_Parcela, Data_Vencimento=@Data_Vencimento, Valor_Parcela=@Valor_Parcela, Historico=@Historico, Cod_Status_Titulo=@Cod_Status_Titulo WHERE Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar = @Cod_Entrada_Titulos_a_Pagar ", conn);
                        conn.Open();
                        Int32 IDCodigoTitulo = Int32.Parse(cod_Entrada_Titulos_a_PagarTextBox2.Text);
                        cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", IDCodigoTitulo);
                        IDParcela = Int32.Parse(Cod_Numero_Parcelas_a_PagarTextBox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Numero_Parcelas_a_Pagar", IDparcela);
                        Int32 Numero_Parcelas = Int32.Parse(numero_ParcelaTextBox1.Text);
                        cmd.Parameters.AddWithValue("@Numero_Parcela", Numero_Parcelas);
                        DateTime DataVencimento = Convert.ToDateTime(dateTimePicker1.Value.Date);
                        DataVencimento.ToShortDateString();
                        cmd.Parameters.AddWithValue("@Data_Vencimento", DataVencimento);
                        Decimal ValorParcela = Convert.ToDecimal(valor_ParcelaTextBox1.Text);
                        cmd.Parameters.AddWithValue("@Valor_Parcela", ValorParcela);
                        cmd.Parameters.AddWithValue("@Historico", historicoTextBox1.Text);
                        Int32 StatusTitulo = Int32.Parse(cod_Status_TituloTextBox2.Text);
                        cmd.Parameters.AddWithValue("@Cod_Status_Titulo", StatusTitulo);
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Comando atualizar executado!");
                      }
                      catch(Exception Ex)
                      {
                        MessageBox.Show("Erro! " + Ex.Message);
                      }
                      finally
                      {
                       conn.Close();
                      }
                      
                      try
                      {
                        cmd = new SqlCommand("UPDATE Entrada_Titulos_a_Pagar SET Data_Login=@Data_Login, Login_Name=@Login_Name WHERE Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar", conn);
                        conn.Open();
                        Data_Agora = Convert.ToDateTime(data_logintxtbox.Text);
                        cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", ID);
                        cmd.Parameters.AddWithValue("@Data_Login", Data_Agora);
                        cmd.Parameters.AddWithValue("@Login_Name", login_NameTextBox.Text);
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Dados da Parcela Atualizados com Sucesso!");
                       }
                       catch (Exception Ex)
                       {
                        MessageBox.Show("Erro! " + Ex.Message);
                       }
                       finally
                       {
                        conn.Close();
                        ExibirDadosTitulo();
                        ExibirDadosParcela();
                        LimparDados();
                       }
                  }
                     else
                     {
                       MessageBox.Show("Informe todos os Dados Necessários para Atualizar a Parcela!");
                     }
            }

    How do I fix that?

    Thanks and best Regards.




    Thursday, April 25, 2019 5:21 PM
  • Sorry for the late reply, but I've been heads-down coding all day today (lots of bug-fixes and upcoming deadlines). It's about bedtime now and I was just about to post a reply that I had already typed out, but I refreshed the page before I did and saw that you had edited it since the last time I read it. Now you're saying that the first update works and the second one doesn't. I would question this line in the second update:

    cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", ID);

    In the first update, you're setting that same parameter to IDCodigoTitulo. I know they are different tables that you are updating, but you seem to be saying that it should be the same number as IDCodigoTitulo. I don't see anywhere in the code where you are setting the ID variable. Maybe that's where your problem is?

    One thing I would change is your if statement, this could cause problems (I don't think you've said whether or not you tried debugging that Click method to see what the actual values are inside of that try{} block). I'd change the if to:

    if (!string.IsNullOrWhiteSpace(cod_Entrada_Titulos_a_PagarTextBox2.Text) && !string.IsNullOrWhiteSpace(Cod_Numero_Parcelas_a_PagarTextBox.Text) && !string.IsNullOrWhiteSpace(numero_ParcelaTextBox1.Text) && !string.IsNullOrWhiteSpace(dateTimePicker1.Tex) && !string.IsNullOrWhiteSpace(valor_ParcelaTextBox1.Text))


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Friday, April 26, 2019 5:13 AM
    Moderator
  • Bonnie good morning,

    You didn't read the last post until the end. The first Update is not working properly, and the seconde one doesn't work.

    I'm posting here the important part . The problem is on "where"

    Answering by your paragraph:

    The columns on the Datatable both key are not null. Which is OK. I deleted the table, and made a new one, to delete all Foreign_Key.

    Cod_Numero_Parcelas_a_Pagar  - is Identity 1. 

    You are correct, I'm Updating two different tables,and both are not working.

    You found the problem. Let's see if you can help me.

    "The WHERE clause is looking at the @Cod_Numero_Parcelas_a_Pagar and @Cod_Entrada_Titulos_a_Pagar parameters. You are setting those parameters like this:"  - the where clause is working when both values are equal.

    @Cod_Entrada_Titulos_a_Pagar, IDCodigoTitulo -> is correct and is receiving the correct value, and 

    @Cod_Numero_Parcelas_a_Pagar, IDParcela -> is not correct and is receiving the  Value of  IDCodigoTitulo.

    All Parameters has been done with the correct values.

    The problem is:

    IDParcela is receiving the same value of IDCodigoTitulo  - I don't know why.

    IDCodigoTitulo = IDParcela - which is not true.

    IDCodigoTitulo could be 8 - It represents the ID code for that record.  

    IDParecela could be 2  - It represents the ID code for the same record of parcel.

    In another words, The Update should look the code of IDCodigoTitulo and IDParecela and make the Update on that especific record.

    And its making the Update only when  IDCodigoTitulo = IDParecela.

    That is why is not working I guess. 

    The First Updatde only happens when the  both ID's  were the same value.

    IDCodigoTitulo was 10 and IDParcela was 10 (I had these values at the table Numero_Parcelas_a_Pagar) the Update made all changes.

    It is not correct. It should work on that especific record, of the IDCodigoTitulo and the especific parcel's ID, which receives IDParcela.

    Example: IDCodigoTitulo 8 and IDParcela 2.

    How to fix the Where Clause, to do that?

    Thanks for your help.

    Saturday, April 27, 2019 1:38 PM
  • Your WHERE clause is fine, I suspect that it's your data that's not fine. Have you tried running a simple SELECT? If you can, run this query in SSMS (Sql Server Management Studio) ... if you don't have SSMS, you should get it.

    To see if you actually have any rows where IDCodigoTitulo is 8 and IDParcela is 2.

    SELECT * FROM Numero_Parcelas_a_Pagar WHERE Cod_Numero_Parcelas_a_Pagar = 2 AND Cod_Entrada_Titulos_a_Pagar = 8

    I suspect that you simply don't have any data with that combination of keys values (or, less likely, maybe you have NULLs in either of those two columns). If that's the case (no matching data), the above SELECT will not return anything.

    Since you know that it does work when both of those keys have the value of 10, try two different SELECTs with just one of them set to 10 and see what other rows you get:

    SELECT * FROM Numero_Parcelas_a_Pagar WHERE Cod_Numero_Parcelas_a_Pagar = 10
    SELECT * FROM Numero_Parcelas_a_Pagar WHERE Cod_Entrada_Titulos_a_Pagar = 10

    You should also try these same two queries with an 8 and again with a 2.


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Saturday, April 27, 2019 4:33 PM
    Moderator
  • Hi Bonnie,

    The queries I tried  are ok. It works on SSMS, and returns the correct values.

    Then I will try to change the Update Statement.

    Even with the correct code it was not working.

    I think it should do a different update, with a row or something else.

    Thanks for your effort.

    Sunday, April 28, 2019 4:17 PM
  • So you're saying that when you try this query in SSMS:

    SELECT * FROM Numero_Parcelas_a_Pagar WHERE Cod_Numero_Parcelas_a_Pagar = 2 AND Cod_Entrada_Titulos_a_Pagar = 8

    It *does* return one row??? I don't know what we could be missing? If a row with those values exists, it should have been updated ... I see nothing wrong with your code!

    Let's try one more thing ... capture the result of the ExecuteNonQuery() and add that to what you display:

    int result = cmd.ExecuteNonQuery();
    MessageBox.Show("Comando atualizar executado! " + result + " rows were updated!");

    That will tell us if the row was actually updated (maybe the values didn't change?) ...


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Sunday, April 28, 2019 4:45 PM
    Moderator
  • Bonnie,

    How do I implement "+result" at the message.  The result is not compiling.

    I includeded using System.Threading.Tasks; but its not working.

    Thanks for keeping up with me.

    Best regards.

    Tuesday, April 30, 2019 3:33 AM
  • Not compiling? I see no reason why not … maybe you have an very old version of Visual Studio?  You don't say what the error is (which you should do, BTW, any time you post here when something's not working … an error message is *always* needed to be shown here, otherwise we're all just guessing) …

    And, if I were to guess as to why it's not compiling, I'd say you simply need to change the MessageBox to this:

    MessageBox.Show("Comando atualizar executado! " + result.ToString() + " rows were updated!");

     And, if that compiles, then please let us know the Visual Studio/compiler version, because the ToString() currently isn't necessary.

    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Tuesday, April 30, 2019 4:59 AM
    Moderator
  • I'm sorry Bonnie, I'm new in these kind of situations.

    When I said, the rusult does not compile, because it doesn't have this word as an option. only "DialogResult" and I included it on the code, 

    send me a message:

    "Comando atualizar executado!" Nonerows were Updated!"

    I'm almost deleting this code and start a knew one, like the fist Update.

    Thanks for your effort.

    Best Regards,

    Wednesday, May 1, 2019 3:02 PM
  • Going back to the code you posted last Thurday (the 25th) and edited on Friday (the 26th), all I was suggesting that you do is change two lines (the changes are bolded below). I suspect that you did something else, but I have no idea what.

    try
    {
        cmd = new SqlCommand("UPDATE Numero_Parcelas_a_Pagar SET Numero_Parcela=@Numero_Parcela, Data_Vencimento=@Data_Vencimento, Valor_Parcela=@Valor_Parcela, Historico=@Historico, Cod_Status_Titulo=@Cod_Status_Titulo WHERE Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar = @Cod_Entrada_Titulos_a_Pagar ", conn);
        conn.Open();
        Int32 IDCodigoTitulo = Int32.Parse(cod_Entrada_Titulos_a_PagarTextBox2.Text);
        cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", IDCodigoTitulo);
        IDParcela = Int32.Parse(Cod_Numero_Parcelas_a_PagarTextBox.Text);
        cmd.Parameters.AddWithValue("@Cod_Numero_Parcelas_a_Pagar", IDparcela);
        Int32 Numero_Parcelas = Int32.Parse(numero_ParcelaTextBox1.Text);
        cmd.Parameters.AddWithValue("@Numero_Parcela", Numero_Parcelas);
        DateTime DataVencimento = Convert.ToDateTime(dateTimePicker1.Value.Date);
        DataVencimento.ToShortDateString();
        cmd.Parameters.AddWithValue("@Data_Vencimento", DataVencimento);
        Decimal ValorParcela = Convert.ToDecimal(valor_ParcelaTextBox1.Text);
        cmd.Parameters.AddWithValue("@Valor_Parcela", ValorParcela);
        cmd.Parameters.AddWithValue("@Historico", historicoTextBox1.Text);
        Int32 StatusTitulo = Int32.Parse(cod_Status_TituloTextBox2.Text);
        cmd.Parameters.AddWithValue("@Cod_Status_Titulo", StatusTitulo);
        int result = cmd.ExecuteNonQuery();
        MessageBox.Show("Comando atualizar executado!" + result.ToString() + " rows were updated!");
    }
    


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Wednesday, May 1, 2019 3:32 PM
    Moderator
  • Bonnie tanks for your reply.

    I made the changes you suggested, nothing changed.

    The message that I got is:

     1 st. "Comando atualizar executado!0 rows were Updated!"

    2 nd. "Dados da Parcela Atualizados com Sucesso!"

    No Error message!!!.

    What a mystery !!!

    Thanks for your help.

    Wednesday, May 1, 2019 6:57 PM
  • Why not temporarily try a select statement and see if any records are found 

    replace

     cmd = new SqlCommand("UPDATE Numero_Parcelas_a_Pagar SET Numero_Parcela=@Numero_Parcela, Data_Vencimento=@Data_Vencimento, Valor_Parcela=@Valor_Parcela, Historico=@Historico, Cod_Status_Titulo=@Cod_Status_Titulo WHERE Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar = @Cod_Entrada_Titulos_a_Pagar ", conn);

    with

     cmd = new SqlCommand("Select * from Numero_Parcelas_a_Pagar WHERE Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar = @Cod_Entrada_Titulos_a_Pagar ", conn);

    that should narrow the problem.


    • Edited by Mel_W Thursday, May 2, 2019 7:42 PM missing the word from
    Wednesday, May 1, 2019 8:24 PM
  • Great suggestion, Mel … definitely better than my idea to just try running the same query in SSMS. Your idea will have him running the SELECT with the same code he's already using.

    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Thursday, May 2, 2019 5:02 AM
    Moderator
  • Mel good evening,

    I made the suggestion and I got the following message:

      "Comando atualizar executado!-1 rows were Updated!"

    What that means?

    The data that is being selected or updated, is in the DataGridView. I select the "payment" that goes to the textboxes to be edited.

    So the Data is there, Is there any problem with primary key being the second column?

    Thanks for your help.

    Friday, May 3, 2019 1:41 AM
  • Ooops, I guess we forgot about the fact that .ExecuteNonQuery() doesn't report number of lines with a SELECT statement (only for INSERT, UPDATE AND DELETE).

    But, what you could do is change your SELECT just a bit to SELECT COUNT(*) and use .ExecuteScalar(). Try this:

    cmd =  new SqlCommand("Select COUNT(*) from Numero_Parcelas_a_Pagar WHERE Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar = @Cod_Entrada_Titulos_a_Pagar ", conn);
    // add your parameters
    int result = cmd.ExecuteScalar();

    Because the SELECT has been changed to return a COUNT, .ExecuteScalar() will return a single value (and the Count of the rows returned from the select will be that single value).


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Friday, May 3, 2019 5:04 AM
    Moderator
  • Bonnie, 

    I got this message:

    "Cannot implicity convert type  'object' to int. An explicit conversion exists (are you missing a cast?)."

    int result = cmd.ExecuteScalar(); --> not compiling.

    I changed to the first Update that it is working. Follows the code:

    OBS.: The first command UPDATE is working, where I update the Invoice information.

    The second command UPDATE in not working where I update the payment information. 

    Why?

    Thanks and regards.

     private void btn_atualizar_Click(object sender, EventArgs e)
            {
                Data_Agora = DateTime.Now;
                data_logintxtbox.Text = Data_Agora.ToShortDateString(); 
                login_NameTextBox.Text = Login.DadosGerais.Loginusuario;
                Int32 IDParcela = 0;
                string constr = @"Data Source=DESKTOP-3O98051;Initial Catalog=SGFRenaissance;Integrated Security=True";
                using (SqlConnection conn = new SqlConnection(constr))
    
                    if (Cod_FornecedorTextbox.Text != "" && TextBox_Cod_CentroCustos.Text != "" && cod_Status_TituloTextBox.Text != "" && cod_DespesaTextBox.Text != "" && Numero_Titulo.Text != "" && valor_TituloTextBox.Text != "")
                    {
                        try
                        {
                            cmd = new SqlCommand("UPDATE Entrada_Titulos_a_Pagar SET Cod_Fornecedor=@Cod_Fornecedor, Numero_Documento=@Numero_Documento, Data_Documento=@Data_Documento, Data_Vencimento=@Data_Vencimento, Valor_Titulo=@Valor_Titulo, Valor_Pago_a_Vista=@Valor_Pago_a_Vista, Acrescimos=@Acrescimos, Descontos=@Descontos, Saldo=@Saldo, Numero_Parcelas=@Numero_Parcelas, Cod_Centro_Custos=@Cod_Centro_Custos, Cod_Status_Titulo=@Cod_Status_Titulo, Cod_Despesa=@Cod_Despesa, Historico_Titulo=@Historico_Titulo, Observacao=@Observacao, Data_Login=@Data_Login, Login_Name=@Login_Name WHERE Cod_Entrada_Titulos_a_Pagar=@Cod_Entrada_Titulos_a_Pagar", conn);
                            conn.Open();
    
                            cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", ID);
                            Int32 Cod_Fornecedor = Int32.Parse(Cod_FornecedorTextbox.Text);
                            cmd.Parameters.AddWithValue("@Cod_Fornecedor", Cod_Fornecedor);
                            cmd.Parameters.AddWithValue("@Numero_Documento", Numero_Titulo.Text);
                            cmd.Parameters.AddWithValue("@Data_Documento", DataDocumentodateTimePicker1.Value);
                            cmd.Parameters.AddWithValue("@Data_Vencimento", datavencimento.Value);
                            decimal valor_Titulo = decimal.Parse(valor_TituloTextBox.Text);
                            cmd.Parameters.AddWithValue("@Valor_Titulo", valor_Titulo);
                            decimal valor_Pago_a_Vista = decimal.Parse(valor_Pago_a_VistaTextBox.Text);
                            cmd.Parameters.AddWithValue("@Valor_Pago_a_Vista", valor_Pago_a_Vista);
                            decimal Acrescimos = decimal.Parse(acrescimosTextBox.Text);
                            cmd.Parameters.AddWithValue("@Acrescimos", Acrescimos);
                            decimal Descontos = decimal.Parse(descontosTextBox.Text);
                            cmd.Parameters.AddWithValue("@Descontos", Descontos);
                            decimal Saldo = decimal.Parse(saldoTextBox.Text);
                            cmd.Parameters.AddWithValue("@Saldo", Saldo);
                            Int32 Numero_Parcelas = Int32.Parse(numero_ParcelasTextBox.Text);
                            cmd.Parameters.AddWithValue("@Numero_Parcelas", Numero_Parcelas);
                            Int32 Cod_Centro_Custos = Int32.Parse(TextBox_Cod_CentroCustos.Text);
                            cmd.Parameters.AddWithValue("@Cod_Centro_Custos", Cod_Centro_Custos);
                            Int32 Cod_Status_Titulo = Int32.Parse(cod_Status_TituloTextBox.Text);
                            cmd.Parameters.AddWithValue("@Cod_Status_Titulo", Cod_Status_Titulo);
                            Int32 Cod_Despesa = Int32.Parse(cod_DespesaTextBox.Text);
                            cmd.Parameters.AddWithValue("@Cod_Despesa", Cod_Despesa);
                            cmd.Parameters.AddWithValue("@Historico_Titulo", historico_TituloTextBox.Text);
                            cmd.Parameters.AddWithValue("@Observacao", observacaoTextBox.Text);
                            DateTime dataagora = Convert.ToDateTime(data_logintxtbox.Text);
                            cmd.Parameters.AddWithValue("@Data_Login", dataagora);
                            cmd.Parameters.AddWithValue("@Login_Name", login_NameTextBox.Text);
                            cmd.ExecuteNonQuery();
                            MessageBox.Show("Show! Dados do Título Atualizados com Sucesso!");
                            conn.Close();
                        }
                        catch (Exception Ex)
                        {
                            MessageBox.Show("Erro! " + Ex.Message);
                        }
    
                        //   Atualizar dados da Parcela
    
                        if (cod_Entrada_Titulos_a_PagarTextBox2.Text != "" && Cod_Numero_Parcelas_a_PagarTextBox.Text != "" && numero_ParcelaTextBox1.Text != "" && dateTimePickerParcela.Text != "" && valor_ParcelaTextBox1.Text != "")
                        {
                            try
                            {
                                cmd = new SqlCommand("UPDATE Numero_Parcelas_a_Pagar SET Numero_Parcela=@Numero_Parcela, Data_Vencimento=@Data_Vencimento, Valor_Parcela=@Valor_Parcela, Historico=@Historico, Cod_Status_Titulo=@Cod_Status_Titulo WHERE Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar ", conn);
                                conn.Open();
                                Int32 IDCodigoTitulo = Int32.Parse(cod_Entrada_Titulos_a_PagarTextBox2.Text);
                                cmd.Parameters.AddWithValue("@Cod_Entrada_Titulos_a_Pagar", IDCodigoTitulo);
                                IDParcela = Int32.Parse(Cod_Numero_Parcelas_a_PagarTextBox.Text);
                                cmd.Parameters.AddWithValue("@Cod_Numero_Parcelas_a_Pagar", IDparcela);
                                Int32 Numero_Parcelas = Int32.Parse(numero_ParcelaTextBox1.Text);
                                cmd.Parameters.AddWithValue("@Numero_Parcela", Numero_Parcelas);
                                DateTime DataVencimento = Convert.ToDateTime(dateTimePickerParcela.Value.Date);
                                DataVencimento.ToShortDateString();
                                cmd.Parameters.AddWithValue("@Data_Vencimento", DataVencimento);
                                Decimal ValorParcela = Convert.ToDecimal(valor_ParcelaTextBox1.Text);
                                cmd.Parameters.AddWithValue("@Valor_Parcela", ValorParcela);
                                cmd.Parameters.AddWithValue("@Historico", historicoTextBox1.Text);
                                Int32 StatusTitulo = Int32.Parse(cod_Status_TituloTextBox2.Text);
                                cmd.Parameters.AddWithValue("@Cod_Status_Titulo", StatusTitulo);
                             //   int result = cmd.ExecuteScalar();
                                int result = cmd.ExecuteNonQuery();
                                MessageBox.Show("Comando atualizar executado!" + result+  " rows were Updated!");
                            }
                            catch (Exception Ex)
                            {
                                MessageBox.Show("Erro! " + Ex.Message);
                            }
                            finally
                            {
                                conn.Close();
                                ExibirDadosTitulo();
                                ExibirDadosParcela();
                                LimparDados();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Informe todos os Dados Necessários para Atualizar o Título!");
                        }
                    }
    

    Lets see if we can find the problem now.

    Thanks once again.

    Saturday, May 4, 2019 5:19 PM
  • Yeah, sorry about the ExecuteScalar() not compiling with the SELECT COUNT(*) suggestion, I wrote the suggested code just off the top of my head. The problem (and fix) should have been obvious from the compiler error, but I guess you didn't catch that. I should have written:

    cmd =  new SqlCommand("Select COUNT(*) from Numero_Parcelas_a_Pagar WHERE Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar = @Cod_Entrada_Titulos_a_Pagar ", conn);
    // add your parameters
    int result = (int)cmd.ExecuteScalar()

    ExecuteScalar() returns an object, but since we're SELECTing COUNT(*), we're returning an integer, so you can just cast to an int, like I show above (in bold).

    Try it again to see the count of Rows that it returns.


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Saturday, May 4, 2019 8:49 PM
    Moderator
  • I'm sorry Bonnie, I didn't figue out how to do a cast. Thanks for you help.

    The message still didn't change.

     "Comando atualizar executado!-0 rows were Updated!"

    I will change the update method, I will make separately in another screen. 

    Thanks for your help Bonnie.

    Monday, May 6, 2019 1:32 PM
  • What that 0 rows result is telling you is that the parameters in the WHERE clause are *not* finding the row you're looking for. The UPDATE isn't going to work any better.  Your two keys don't have correct values such that the SELECT returns any rows:

    WHERE Cod_Numero_Parcelas_a_Pagar=@Cod_Numero_Parcelas_a_Pagar AND Cod_Entrada_Titulos_a_Pagar  = @Cod_Entrada_Titulos_a_Pagar

    There is something wrong with the values you are using to set the two @ parameters.


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Monday, May 6, 2019 4:39 PM
    Moderator
  • Bonnie good evening,

    Sorry to answer you this late. I made a change in my system, I included a separate screen to Update the payments.

    I did a DataSet with the wizard, and the command Update is working propely. Everything is fine.

    I won't worry about making only one update or two updates. It will not mather, once it won' be used frequently.

    Lets end this posts. Thank you very much for your support.

    One line solved the problem.

      this.numero_Parcelas_a_PagarTableAdapter.Update(this.numeroParcelasaPagarUpdate.Numero_Parcelas_a_Pagar);

    I appreciated your help.

    best regards.

    Friday, May 10, 2019 1:01 AM
  • Personally, I don't like the wizard and the TableAdapters … but, since it works for you, then I guess they're not always bad!  ;0) Anyway, I'm glad that you found a way to solve your problem!  =0)

    You should mark your last reply as an Answer!


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    Saturday, May 11, 2019 8:42 PM
    Moderator