0

我正在尝试从表中获取一些数据。此查询在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中运行良好

4

3 回答 3

0

It can be done with simple query bcz time stamp is int and it increments like - 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;";
于 2013-05-30T07:39:37.117 回答
0

您正在执行的不是单个查询,而是多个语句。

@c您在开始时设置的格式也与用于参数化查询的格式相同。

c# 在您发送的参数列表中搜索@c,由于未找到,您会收到错误消息。

您最好在 mysql 中编写一个接受您的参数并返回结果的例程。该变量@c将在例程内部。

于 2013-05-30T06:27:10.613 回答
0

您在查询中定义了一个参数,在 SQL 中它在 c# 中可以,您没有在查询中声明参数,您只将它们传递给它

查看此站点以获取示例(站点

更好的是,创建一个存储过程并调用它,而不是在代码中编写查询

这更好,因为它将被预编译,并且向服务器发送的数据更少

否则,每次您将查询发送到服务器时,它都会被重新评估并再次编译

于 2013-05-30T06:44:05.850 回答