【发布时间】:2019-08-27 10:59:52
【问题描述】:
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”。' ]
【问题讨论】:
-
我认为使用
ExecuteNonQuery执行SELECT查询根本不会做任何事情。查询将执行,但您不会得到结果。也许您想要的是在前两个查询中使用ExecuteScalar来实际获得结果。看起来您不需要这些查询的参数。 -
唯一的问题是执行标量只能作用于第一行的第一项
-
当您执行
SELECT MIN(DateStartSE)时,您只选择了一个值。您的 SELECT 返回一行一列。这正是ExecuteScalar有意义的场景。 -
对不起,你是对的
标签: c# sql sql-server wpf