Как добавить значение в колонку и обновить базу данных

Я пытаюсь добавить значение столбцаЕжегодные сборы вdataGridViewAFp1 на новое значениеAF2 из текстового поляtxtp1AF.Text что я преобразовал в целое число. Тогда результат от сложенияResultAF преобразуется обратно в строкуupdatedAF и это значение для обновления в базе данных. Я инициализировал переменнуюAF11 до 0. Запрос обновляет выбранные столбцы. Идея состоит в том, чтобы получить любую ценность вAF2 и добавить его к любому значению в этом столбце и строке конкретно, который я положил вAF11 вбаза данных отсюда обновленное значениеupdatedAF, Вот что я сделал до сих пор, но, похоже, не работает. Значения не складываются.

 private void btnEnterAFp1_Click(object sender, EventArgs e)
    {            
        if (string.IsNullOrWhiteSpace(txtp1AF.Text))
        {                

            MessageBox.Show("Please Enter fee","Oops",MessageBoxButtons.OK,MessageBoxIcon.Warning);
        }
        else
        {
            if (dataGridViewAFp1.Rows[0].Cells["Annual_Fees"].Value != null)
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;

                int.TryParse(dataGridViewAFp1.Rows[0].Cells["Annual_Fees"].Value.ToString(), out AF11);
                AF2 = Convert.ToInt32(txtp1AF.Text);
                ResultAF = AF11 + AF2;
                String updatedAF = Convert.ToString(ResultAF);

                cmd.CommandText = @"Update P1 set [email protected] where Sponsorship_Status = 'Sponsored' OR Sponsorship_Status = 'Unsponsored' OR Sponsorship_Status = 'Formerly Sponsored' ";
                cmd.Parameters.AddWithValue("@af", updatedAF);
                cmd.ExecuteNonQuery();
                DataTable dt = new DataTable();
                SqlDataAdapter adap = new SqlDataAdapter(cmd);
                adap.Fill(dt);
                //dataGridViewAFp1.DataSource = dt;
                conn.Close();
                MessageBox.Show("Record Updated Successfully ");
                txtp1AF.Text = " "; 
            }
 Elijah Ayeeta30 мая 2016 г., 10:52
да они объявлены как int
 Beldi Anouar30 мая 2016 г., 10:49
Ваши переменные ResultAF, AF11, AF2 объявлены как int?
 Fabio30 мая 2016 г., 10:53
Проверьтеcmd.ExecuteNonQuery(); должен возвращать значение больше 0. Если возвращаемое значение равно 0 - это означает, что строки не были обновлены
 Beldi Anouar30 мая 2016 г., 10:21
Вы получаете сообщение об ошибке?
 Elijah Ayeeta30 мая 2016 г., 10:24
Я получалInput string not valid это было до того, как я обновил свой код до этого. Нет сообщения об ошибке, значения не складываются
 Beldi Anouar30 мая 2016 г., 10:35
Попробуйте добавить скобки в свой запрос: [Annual_Fees] и [Sponsorship_Status]
 Elijah Ayeeta30 мая 2016 г., 10:45
запрос работает нормально, логика - нет, идея в том, что какое бы значение в переменной AF2 не добавлялось к значению в этом столбце годовых сборов
 Elijah Ayeeta30 мая 2016 г., 11:08
@ Фабио, кажется, я не получаюResultAF значение, я вместо этого получаюAF2 значение как обновленное значение, и все же я хочу, чтобы это былоResultAF
 Beldi Anouar30 мая 2016 г., 11:21
@ sea50 вы уверены, что dataGridViewAFp1.Rows [0] .Cells ["Annual_Fees"]. Value.ToString () содержит числовое значение?
 Elijah Ayeeta30 мая 2016 г., 11:24
да, этот столбец содержит числовое значение

Ответы на вопрос(1)

Решение Вопроса

что все остальное работает нормально на вашей стороне, основная проблема заключается в том, что вы используете тот жеUpdate Команда, содержащаяся в вашемcmd переменная, которую вы использовали ранее для обновления базы данных, чтобы попытаться заполнить вашdt с обновленными значениями. Вместо этого вы должны использоватьSelect Для этого подайте команду:

Изменить это:

DataTable dt = new DataTable();
SqlDataAdapter adap = new SqlDataAdapter(cmd);
adap.Fill(dt);
//dataGridViewAFp1.DataSource = dt;

к этому:

 DataTable dt = new DataTable();
 SqlDataAdapter adap = new SqlDataAdapter("select * from P1", conn);
 adap.Fill(dt);
 dataGridViewAFp1.DataSource = dt;

РЕДАКТИРОВАТЬ: Добавляем полный рабочий код. В этом примере столбецListPrice (индекс столбца 9) обновляется для первых 2 строк данных из100.00 в200.00(часы). Я использую ваш код, просто меняю имена таблиц и столбцов.

    private void btnEnterAFp1_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\AdventureWorks2014.mdf;Integrated Security=True;Connect Timeout=30");
        decimal AF2;
        decimal AF11;
        decimal ResultAF;

        if (string.IsNullOrWhiteSpace(txtp1AF.Text))
        {

            MessageBox.Show("Please Enter fee", "Oops", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        else
        {
            if (dataGridViewAFp1.Rows[0].Cells[9].Value != null)
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;

                decimal.TryParse(dataGridViewAFp1.Rows[0].Cells[9].Value.ToString(), out AF11);
                AF2 = Convert.ToDecimal(txtp1AF.Text);
                ResultAF = AF11 + AF2;
                String updatedAF = Convert.ToString(ResultAF);

                cmd.CommandText = @"Update Production.Product set [email protected] where Name = 'Adjustable Race' OR Name = 'Bearing Ball'";
                cmd.Parameters.AddWithValue("@af", updatedAF);
                int n = cmd.ExecuteNonQuery();

                DataTable dt = new DataTable();
                SqlDataAdapter adap = new SqlDataAdapter("select * from Production.Product", conn);
                adap.Fill(dt);

                dataGridViewAFp1.DataSource = dt;

                conn.Close();
                MessageBox.Show("Record Updated Successfully ");
                txtp1AF.Text = " ";
            }
        }
    }

 Elijah Ayeeta30 мая 2016 г., 22:11
это сработало!!! пришлось также изменить тип данных столбца базы данных
 Elijah Ayeeta30 мая 2016 г., 18:31
`int.TryParse (dataGridViewAFp1.Rows [0] .Cells [" Annual_Fees "]. Value.ToString (), out AF11);` оказывается, что значениеЕжегодные сборы столбец не передается в переменнуюAF11
 Elijah Ayeeta30 мая 2016 г., 17:59
значения по-прежнему не складываются, например, вЕжегодные сборы В столбце у меня есть 100, затем я ввожу новое значение 100, текущее значение вЕжегодные сборы столбец должен быть 200. Но они не складываются
 jsanalytics30 мая 2016 г., 19:03
проверить, еслиTryParse() возвращаетсяtrue или жеfalse.
 Elijah Ayeeta30 мая 2016 г., 20:01
 jsanalytics30 мая 2016 г., 19:02
ЕслиdataGridViewAFp1.Rows[0].Cells["Annual_Fees"].Value например, имеет точку100.00тогда вы не можете использоватьint.TryParse()Вы должны использовать, например,decimal.TryParse().
 jsanalytics30 мая 2016 г., 18:03
Вы прошли через отладчик, чтобы проверить свои промежуточные вычисления?
 Elijah Ayeeta30 мая 2016 г., 18:36
но как я могу получить значение из строк в этом столбце из dataTable может быть, это будет работать таким образом

Ваш ответ на вопрос