Как использовать FK SQL в отношении M: 1 - PullRequest
1 голос
/ 05 апреля 2019

Мне нужно понять, как работать с FK SQL, я действительно в отчаянии. У меня есть FK между двумя столами. Из третьей таблицы я выбираю, какой элемент я хочу выполнить (эти элементы являются локальными URL). Я выбираю их, я запускаю их, мне нужно сохранить в третьей таблице (tabStoricoDetail) код, относящийся к начатым элементам. ОСТАНОВИТЬ, если мне удастся, как это сделать, я могу попытаться забрать первую дату первого события и последнюю дату последнего элемента. Я думал, что ФК, который я сделал, был в порядке, но это не так. ПОЖАЛУЙСТА, ПОМОГИТЕ ПОЖАЛУЙСТА 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 Ответ

1 голос
/ 05 апреля 2019

При вставке строки в tabStoricoDetail вам необходимо сохранить сгенерированный идентификатор в переменную.Обратите внимание на предложение 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...