C# 在asp.net类文件中执行sql命令时出现致命错误
我正试图从表中获取一些数据。此查询在mysql中运行良好,但在asp.net c类文件中执行时会引发异常: sql查询中出现致命错误。。 未定义内部异常@cC# 在asp.net类文件中执行sql命令时出现致命错误,c#,asp.net,mysql,sql,database,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
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中运行良好,您执行的不是单个查询,而是多个语句 @在开始时设置的c也是用于参数化查询的相同格式 c在您发送的参数列表中搜索@c,由于未找到该参数,因此您会得到一个错误
最好在mysql中编写一个例程,获取参数并返回结果。变量@c将是例程的内部变量 您正在查询中定义一个参数,在SQL中是ok的,在c中是ok的,您不会在查询中声明参数 你只需要把它们传给它 查看此站点以获取示例 更好的是,创建一个存储过程并调用它,而不是在代码中编写查询 这更好,因为它将被预编译,并且向服务器发送的数据更少
否则,每次将查询发送到服务器时,它都将被重新计算并再次编译可以使用简单查询完成,bcz time stamp为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;";
如果我将@c作为外部参数从c var中传递,会怎么样?您可以将其作为参数设置为0,但我猜mysql不会将其视为内部参数,并为每一行更新它。试试也无妨。是的,这就是问题所在。对于没有变量的类似结果,是否有其他方法声明变量或任何其他查询@在mysql中编写例程非常简单。非常适合你的需要。为什么不这样做呢?如果您已经在SQL Server中编写了一个存储过程,也是一样的。只有几行代码,应该说非常简单。我没有使用过存储过程。你能帮忙吗?这些参数也会减慢查询速度@Simsim您正在使用的数据库是什么?啊哈,mysql,刚刚注意到…对不起,我对mysql不是很熟悉我正在使用mysql。。有没有其他方法可以在不使用变量的情况下获得相同的结果?通过查看您的查询,您可以对数据进行排序,而不是使用@c参数作为计数器,这样您就不需要第一个参数google如何在mysql中实现这一点,另外,在字符串中构造与参数值连接在一起的查询(而不是使用参数)将起作用,但这将使您面临sql注入的风险,不推荐这样做