在asp.net类文件中执行的sql命令中的致命错误

时间:2013-05-30 06:15:27

标签: c# asp.net mysql sql database

我想从表中获取一些数据。此查询可以使用 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

中正常运行

3 个答案:

答案 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;";