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