如何将值插入表中并使用一个按钮更新另一个表中的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将值插入表中并使用一个按钮更新另一个表中的值?相关的知识,希望对你有一定的参考价值。

我有两个表,称为支付和约会,使用约会相互关系。对于我当前的代码,它只会在付款表中插入值。我想要实现的是,如果我键入包含约会的形式的值,然后单击提交,我刚刚输入的约会,也将更新该约会表aStatus的记录,以完成或等待。对于我的aStatus组合框,我在item属性中等待并完成填充它。目前我的代码只能插入到支付表中。 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;
}
答案

您有两个选项,将参数传递给存储过程,该过程将记录插入到付款表中并更新Appointement表,或者从代码中执行这两个命令。

无论哪种方式,您都需要提供交易以避免存储付款记录(如果出现错误)并且无法更新相应的约会记录。

让我们试试代码版本(请测试它,因为我已经在这里写了动态)

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;
         }
     }
}
另一答案

在成功地从XML中插入表A中的数据之后,我想在表B中插入两个字段,即“for_dt”,另一个是“加载指示”。

以上是关于如何将值插入表中并使用一个按钮更新另一个表中的值?的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个表中的值插入和/或更新记录

Mysql - 将值插入具有未知主键的多个表中

如何将一个表中的值插入到另一个表中?

oracle - 如何将一个表中的唯一值多次插入到另一个表中?

使用雪花中的存储过程将值插入表中

在 Oracle 中,我可以执行“将值插入或更新到表中”吗