我想从表中获取一些数据。此查询可以使用 mysql 运行,但在 asp.net c#类文件中执行时会抛出异常: sql查询中的致命错误.. 内部异常@c未定义..
string sqlQuery = "SET @c:=0;
SELECT * FROM (SELECT TimeStamp, FwdHr, W , @c:=@c+1 as counter
FROM Meter_Data WHERE TimeStamp >= @fromTime AND TimeStamp <= @toTime
AND MeterID = @meterID" + " AND DeviceID = @deviceID) as tmp
WHERE counter % 20 =1 ORDER BY TimeStamp";
如何定义@c
然后?因为它在 SQL server
答案 0 :(得分:0)
您正在执行的不是单个查询,而是多个语句。
您在开始时设置的 @c
也与用于参数化查询的格式相同。
c#在您发送的参数列表中搜索@c
,由于未找到,您将收到错误。
你最好在mysql中编写一个带有参数并返回结果的例程。变量@c
将是例程的内部变量。
答案 1 :(得分:0)
你在查询中定义了一个参数,在SQL中它在c#中的确定,你不要在查询中声明参数 你只把它们传递给它
查看此网站以获取示例(site)
更好的是,创建一个存储过程并调用它而不是在代码中编写查询
这是更好的,因为它将被预编译,并向服务器发送更少的数据
否则,每次将查询发送到服务器时,都会重新评估它们并再次编译
答案 2 :(得分:0)
可以通过简单的查询完成bcz时间戳是int,它增量如 - 1902020222,1902020223,......
string sqlQuery = "SELECT TimeStamp, FwdHr, W FROM Meter_Data WHERE TimeStamp >= @fromTime AND TimeStamp <= @toTime AND MeterID = @meterID" +
" AND DeviceID = @deviceID AND TimeStamp%20 = 0 ORDER BY TimeStamp;";