Столкновение ExecuteScalar и ExecuteNonQuery - PullRequest
2 голосов
/ 05 апреля 2019

У меня проблема с ExecuteScalar, он не позволяет мне использовать ExecuteNonQuery, но мне нужно выполнить два запроса, чтобы подобрать минимальную дату (dateStart9 и максимальную дату ( dateEnd) между диапазоном дат выбранных элементов другой таблицы.

sqliteCon.Open();
  if (sqliteCon.State == System.Data.ConnectionState.Open)
  {
    //query date non va a causa dell'execute scalar
    SqlCommand cmdDS = new SqlCommand("SELECT MIN(DateStartSE) AS DATESE FROM tabStoreExec JOIN tabList ON tabStoreExec.idSE=tabList.idL WHERE tabList.selection=1", sqliteCon);
    SqlCommand cmdDE = new SqlCommand("SELECT MAX(DateEndSE) AS DATEED FROM tabStoreExec JOIN tabList ON tabStoreExec.idSE=tabList.idL WHERE tabList.selection=1", sqliteCon);
    cmdDS.Parameters.AddWithValue("@DATESE", " DATESE");
    cmdDE.Parameters.AddWithValue("@DATEED", "DATEED");
    cmdDS.ExecuteNonQuery();
    cmdDE.ExecuteNonQuery();


  SqlCommand cmd1 = new SqlCommand("INSERT INTO tabStoricoDetail(NomeItem,ResItemDet,DateStartDet,DateEndDet) OUTPUT inserted.Id VALUES ('Prova','RProva',@DATESE,@DATEED)", sqliteCon);
  int generatedId = Convert.ToInt32(cmd1.ExecuteScalar());
  cmd1.Parameters.Clear();
  SqlCommand cmd2 = new SqlCommand("UPDATE tabStoreExec SET FK_TSD_id = @tsdId FROM tabList JOIN tabStoreExec ON tabList.idL = tabStoreExec.idSE WHERE tabList.selection=1 ", sqliteCon);
  cmd2.Parameters.AddWithValue("@tsdId", generatedId);
  cmd2.ExecuteNonQuery();

    MessageBox.Show("Dato Aggiunto");

  }
  sqliteCon.Close();

Я близок к решению, но ошибка в том, что [объявить скалярную переменную "@DATESE". ' ]

Ответы [ 2 ]

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

Похоже, вы должны добавить параметры к cmd1 вместо cmdDS и cmdDE. Вы должны вызвать ExecuteScalar(), чтобы получить значение из этих команд:

SqlCommand cmdDS = new SqlCommand("SELECT MIN(DateStartSE) AS DATESE FROM tabStoreExec JOIN tabList ON tabStoreExec.idSE=tabList.idL WHERE tabList.selection=1", sqliteCon);
SqlCommand cmdDE = new SqlCommand("SELECT MAX(DateEndSE) AS DATEED FROM tabStoreExec JOIN tabList ON tabStoreExec.idSE=tabList.idL WHERE tabList.selection=1", sqliteCon);
var DATESE = cmdDS.ExecuteScalar();
var DATEED = cmdDE.ExecuteScalar();


SqlCommand cmd1 = new SqlCommand("INSERT INTO tabStoricoDetail(NomeItem,ResItemDet,DateStartDet,DateEndDet) OUTPUT inserted.Id VALUES ('Prova','RProva',@DATESE,@DATEED)", sqliteCon);
cmd1.Parameters.AddWithValue("@DATESE", DATESE);
cmd1.Parameters.AddWithValue("@DATEED", DATEED);
0 голосов
/ 05 апреля 2019

Вам необходимо добавить параметры @DATESE,@DATEED в cmd1 перед его выполнением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...