C# 让SQL从带有日期的C开始工作

C# 让SQL从带有日期的C开始工作,c#,sql-server,C#,Sql Server,我有一个在SQL中工作的简单SQL查询: select txdate, acct from trans where txdate = '1/31/2017' 我无法从C: DateTime sDate = dtStart.Value; // date time picker // connect to server SqlCommand cmd = new SqlCommand("select txdate from trans where txdate = '@sdate'

我有一个在SQL中工作的简单SQL查询:

 select txdate, acct from trans where txdate = '1/31/2017' 
我无法从C:

  DateTime sDate = dtStart.Value;  // date time picker
  // connect to server
  SqlCommand cmd = new SqlCommand("select txdate from trans where txdate = '@sdate'", cx);
  cmd.Parameters.AddWithValue("@sdate", sDate);
  var retVal = cmd.ExecuteNonQuery();
var在SQLServer中返回一组记录时总是返回-1。我已经谈了好几个小时了。任何帮助都将不胜感激

这是一个增加天数的循环。我的目标是得到第一次约会的结果。我试过不引用任何语录,也没什么区别

ExecuteScalar仅返回 查询的第一行。ExecuteReader返回一个可以 迭代整个结果集。ExecuteOnQuery不支持 返回所有数据:仅受插入影响的行数, 更新或删除

在您的情况下,您试图获取的数据不是inset update或delete,这就是为什么ExecuteOnQuery返回-1的原因,因为没有任何行受到影响。所以你可以像这样使用ExecuteScalar


如果要返回多个值,则应使用SqldataAdapter或ExecuteReader

您想做什么?是否获取查询结果?改用。另外,你的参数不应该用单引号括起来。看看这个,我希望这能帮助你知道每个日期有多少行是trans?您真的需要select txdate from trans返回多个相同的行,其中txdate=或仅返回计数吗?ExecuteOnQuery不返回数据,但返回受更新、插入和删除影响的行。即使行受到影响,它也可能始终返回-1。具体取决于配置集nocount。不要使用AddWithValue。要选择数据,请根据需要使用ExecuteReader或ExecuteCalar。删除@sdate周围的引号。我认为@pinkfloydx33调用了它-当我使用var retVal=DateTimecmd.ExecuteScalar;,删除@sdate周围的引号;,我一直得到:对象引用未设置为对象的实例。我将它放在一个try块中,递增日期,直到它是第一个已知日期,并且现在可以工作。
 DateTime sDate = dtStart.Value;  // date time picker
  // connect to server
  SqlCommand cmd = new SqlCommand("select txdate from trans where txdate = @sdate", cx);
  cmd.Parameters.AddWithValue("@sdate", sDate);
  var result = (DateTime)cmd.ExecuteScalar();