Как вставить значение в таблицу, а также обновить значение в другой таблице с помощью одной кнопки?

У меня есть две таблицы, называемые оплатой и назначением, в отношениях друг с другом с использованием идентификатора назначения. Для моих текущих кодов он только вставляет значение в таблицу платежей. Чего я хотел бы добиться, так это того, что если я ввожу значения в форму, включая идентификатор встречи, а затем нажимаю «Отправить», только что введенный идентификатор встречи также обновит запись этой таблицы встреч aStatus либо до завершенного, либо до ожидания. Для моего поля со списком aStatus я заполняю его ожиданием и завершаю в свойстве элемента. В настоящее время мои коды можно вставлять только в таблицу платежей. aStatus находится за другим столом, который является столом для встреч.

Это моя вставка кода выпадающего списка для aStatus. Я хочу, чтобы он обновлял aStatus таблицы встреч. Итак, как мне объединить этот код с моими нижними кодами в одной кнопке? этот код обновит статус в таблице назначений, а коды внизу вставят значение в таблицу платежей.

string value = cbaStatus.SelectedItem == null ? "waiting" : cbaStatus.SelectedItem.ToString();
updateCmd.Parameters.AddWithValue("@cbaStatus", value);

Моя форма

введите здесь описание изображения

Мои таблицы и отношения

введите здесь описание изображения

Ошибка при следовании кодам Стива

введите здесь описание изображения

private void btnSubmit_Click(object sender, EventArgs e)
{
    int result = AddPaymentRecord();
    if (result > 0)
    {
        MessageBox.Show("Insert Successful");
        txtamount.Clear();
        txtamountPaid.Clear();
        txtappointmentID.Clear();
        txtamount.Focus();
    }
    else
    {
        MessageBox.Show("Insert Fail");
        txtamount.Clear();
        txtamountPaid.Clear();
        txtappointmentID.Clear();
        txtamount.Focus();
    }
}

private int AddPaymentRecord()
{
    int result = 0;

    string strConnectionString = ConfigurationManager.ConnectionStrings["sacpConnection"].ConnectionString;

    SqlConnection myConnect = new SqlConnection(strConnectionString);

    String strCommandText = "INSERT PAYMENT(amount, amountPaid, paymentDate, paymentType, appointmentID) "
        + " VALUES (@Newamount, @NewamountPaid,@NewpaymentDate, @NewpaymentType, @NewappointmentID)";

    SqlCommand updateCmd = new SqlCommand(strCommandText, myConnect);
    updateCmd.Parameters.AddWithValue("@Newamount", txtamount.Text);
    updateCmd.Parameters.AddWithValue("@NewamountPaid", txtamountPaid.Text);
    updateCmd.Parameters.AddWithValue("@NewpaymentDate", dtppaymentDate.Value);
    if (rbCash.Checked)
        updateCmd.Parameters.AddWithValue("@NewpaymentType", "Cash");
    else
        updateCmd.Parameters.AddWithValue("@NewpaymentType", "Credit Card");
    updateCmd.Parameters.AddWithValue("@NewappointmentID", txtappointmentID.Text);

    myConnect.Open();

    result = updateCmd.ExecuteNonQuery();

    myConnect.Close();
    return result;
}

person Pony    schedule 09.02.2014    source источник


Ответы (2)


У вас есть два варианта: передать параметры хранимой процедуре, которая вставит запись в таблицу платежей и обновит таблицу встреч, или выполните две команды из вашего кода.

В любом случае вам необходимо предоставить транзакцию, чтобы избежать сохранения записи о платеже (в случае ошибок) и не обновить соответствующую запись о встрече.

Давайте попробуем версию кода (пожалуйста, протестируйте, потому что я написал здесь на лету)

private int AddPaymentRecord()
{
    int result = 0;

    // The command text contains two statements separated by a semicolon
    String strCommandText = @"INSERT PAYMENT(amount, amountPaid, paymentDate, 
                              paymentType, appointmentID) VALUES (@Newamount,
                              @NewamountPaid,@NewpaymentDate,@NewpaymentType, 
                              @NewappointmentID); 
                             UPDATE Appointment SET aStatus=@cbaStatus
                             WHERE appointmentID = @NewappointmentID";

    string strConnectionString = ConfigurationManager.ConnectionStrings["sacpConnection"].ConnectionString;

    using(SqlConnection myConnect = new SqlConnection(strConnectionString))
    {
         myConnect.Open();

         // Start a transaction to be sure that the two commands are both executed
         SqlTransaction tran = myConnect.BeginTransaction();
         try
         {
           using(SqlCommand updateCmd = new SqlCommand(strCommandText, myConnect, tran))
           {
              updateCmd.Parameters.AddWithValue("@Newamount", txtamount.Text);
              updateCmd.Parameters.AddWithValue("@NewamountPaid", txtamountPaid.Text);
              updateCmd.Parameters.AddWithValue("@NewpaymentDate", dtppaymentDate.Value);
              if (rbCash.Checked)
                updateCmd.Parameters.AddWithValue("@NewpaymentType", "Cash");
              else
                updateCmd.Parameters.AddWithValue("@NewpaymentType", "Credit Card");
              updateCmd.Parameters.AddWithValue("@NewappointmentID", txtappointmentID.Text);
              string value = cbaStatus.SelectedItem == null ? 
                       "waiting" : cbaStatus.SelectedItem.ToString();

              // Add also the parameter required by the second batch statement
              updateCmd.Parameters.AddWithValue("@cbaStatus", value);
              result = updateCmd.ExecuteNonQuery();

              // If we reach this point we have updated both records. 
              // Commit the changes 
              tran.Commit();
           }
           return result;
         }
         catch
         {
            // Something wrong. rollback any changes and rethrow the exception
            // let the caller code handle this exception.
            tran.Rollback();
            throw;
         }
     }
}
person Steve    schedule 09.02.2014
comment
@Jordjmax В какой-то момент вы должны взять на себя ответственность и понять код, который вы включаете для своего школьного проекта. - person Keith Payne; 09.02.2014
comment
opps назначение имеет орфографическую ошибку, я думаю. Хорошо, лол. @Кит Пейн - person Pony; 09.02.2014

После успешной вставки данных в таблицу A из XML я хочу вставить два поля в таблицу B, то есть «for_dt», а другое - «индикатор загрузки».

person Renu Singh    schedule 30.08.2018