如何在关系M:1中使用FK SQL

时间:2019-04-05 07:21:29

标签: c# sql sql-server wpf

我需要了解如何使用FK SQL,我真的很绝望。我在两个桌子之间有一个FK。从第三张表中,选择我要执行的项目(这些项目是本地URL)。我选择它们,然后运行它们,我需要在第三个表(tabStoricoDetail)中保存一个与启动项相关的代码。如果可以,请停止操作,然后尝试拾取第一个事件的第一个日期和最后一个项目的最后一个日期。我以为我做的FK还可以,但事实并非如此。请帮助 enter image description here

//btnStart it allows to lunch the selected items 
private void btnSTART_Click(object sender, RoutedEventArgs e)
{

  ApplyExecuteResults(ExecuteResults());//non toccare



  sqliteCon.Open();
  if (sqliteCon.State == System.Data.ConnectionState.Open)
  {


    SqlCommand cmd1 = new SqlCommand("INSERT INTO tabStoricoDetail(NomeItem,ResItemDet)values('Prova','RProva')", sqliteCon);
    /*cmd1.Parameters.AddWithValue("@DATESD", this.DPStart.Text);
    cmd1.Parameters.AddWithValue("@DATEED", this.DPEnd.Text);*/
    cmd1.ExecuteNonQuery();
    cmd1.Parameters.Clear();


    SqlCommand cmd2 = new SqlCommand("UPDATE tabStoreExec SET FK_TSD_id =(tabStoricoDetail.id)", sqliteCon);
    cmd2.ExecuteNonQuery();
    cmd2.Parameters.Clear();


    MessageBox.Show("Dato Aggiunto");

  }
  sqliteCon.Close();


}

enter image description here

1 个答案:

答案 0 :(得分:1)

tabStoricoDetail中插入一行时,您需要将生成的ID保存到变量中。请注意OUTPUT语句的INSERT子句:

SqlCommand cmd1 = new SqlCommand("INSERT INTO tabStoricoDetail(NomeItem,ResItemDet) OUTPUT inserted.Id VALUES ('Prova','RProva')", sqliteCon);
/*cmd1.Parameters.AddWithValue("@DATESD", this.DPStart.Text);
cmd1.Parameters.AddWithValue("@DATEED", this.DPEnd.Text);*/
int generatedId = Convert.ToInt32(cmd1.ExecuteScalar());
cmd1.Parameters.Clear();

然后,您可能会在更新generatedId时使用此tabStoreExec,尽管您可能希望在WHERE上使用某种UPDATE,因为现在您将只更新所有现有的行。

SqlCommand cmd2 = new SqlCommand("UPDATE tabStoreExec SET FK_TSD_id = @tsdId", sqliteCon);
cmd2.Parameters.AddWithValue("@tsdId", generatedId);
cmd2.ExecuteNonQuery();