ORDER BY的SQL查询语法不起作用

时间:2014-03-20 16:06:01

标签: c# sql

我是C#的新手,但我非常了解SQL。我有一个在SQL编辑器中工作正常的查询,但我无法将其集成到我的代码中。它抛出错误的SQL语法异常。可以正常工作的原始SQL查询是:

  

从Table_A中选择不同的描述,其中id =' 001'按说明排序;

C#字符串就像:

_cmd.CommandText = "select distinct description from Table_A where Plant_ID =" + _selectedPlantID + "order by description";

当我删除+ "order by description部分时,上述查询在C#程序中有效。这里_selectedPlantID是唯一在程序中获得价值的变量。我很确定应该有一些引号问题,但对我来说一切看起来都很好,所以想知道是否有其他特定的方法在C#中写这个?

4 个答案:

答案 0 :(得分:14)

1替换为_selectedPlantID后,这就是您在C#中的样子:

select distinct description from Table_A where id =1order by description

你看到了问题吗?

但是,请使用parameterized queries代替添加空格来“修复”问题。您刚刚遇到的这个问题只是一个的“连接字符串和参数”的麻烦;然而,最危险的是SQL injection

答案 1 :(得分:3)

在字符串中的ORDER BY子句之前需要一个空格,如下所示:

_cmd.CommandText = "select distinct description from Table_A where Plant_ID =" + _selectedPlantID + " order by description";

答案 2 :(得分:3)

您错过了"'order by之间的空格,这样可行:

 _cmd.CommandText = "select distinct description from Table_A where Plant_ID ='" + _selectedPlantID + "' order by description";

但由于它对SQL Injection(综合示例here)开放,请考虑改为使用parametized queries

_cmd.CommandText = "select distinct description from Table_A where Plant_ID = ? order by description";
command.Parameters.AddWithValue("@plant", _selectedPlantID );

答案 3 :(得分:0)

使用string.Format通常也是连接字符串的好方法,特别是如果你要组合很多字符串:

_cmd.CommandText = string.Format("select distinct description from Table_A where Plant_ID ='{0}' order by description", _selectedPlantID);