Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net类文件中执行sql命令时出现致命错误_C#_Asp.net_Mysql_Sql_Database - Fatal编程技术网

C# 在asp.net类文件中执行sql命令时出现致命错误

C# 在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

我正试图从表中获取一些数据。此查询在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中运行良好,您执行的不是单个查询,而是多个语句

@在开始时设置的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注入的风险,不推荐这样做