按参数排序Firebird + C#

时间:2011-11-29 14:41:30

标签: c# asp.net sql-order-by firebird

我目前正在编写一个从firebird数据库中读取日期的方法。 这是标题:

 public static void ReadInfo(int first, int skip,string orderBy)

那是我的SQL查询:

const string SQL = "SELECT FIRST @first SKIP @skip A.ID,B.SHORTNAME, A.DATETIME, A.COMPUTERNAME,A.OSLOGIN, A.DBLOGIN, A.INFOTYPE, A.INFO FROM EVENTSGENERAL A JOIN EVENTSGENERATORS B ON B.GENERATOR_ = A.GENERATOR_ ORDER BY @orderBy";

这是我为查询准备参数的地方:

cmd.Parameters.Add("@first", FbDbType.Integer).Value = first;
cmd.Parameters.Add("@skip", FbDbType.Integer).Value = skip;
cmd.Parameters.Add ("@orderBy", FbDbType.VarChar, 50).Value = orderBy;

问题是:前两个参数有效(第一个和跳过正确准备),我已经测试过了。但是,一旦我尝试运行它,orderBy参数会引发一个exeption:

{"Dynamic SQL Error\r\nSQL error code = -804\r\nData type unknown"}

我曾尝试将脚趾FbDbType更改为“Text”,但仍无法正常工作。 抱歉任何不好的英语。 提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

对于指定的order by子句需求字段,您无法传递字段名称。如果你使@orderBy参数数据类型为整数并传递字段索引,那么可能有用。例如

select id, name from city order by 1 //this will order by id field

或者如果您以编程方式编辑sql语句,如下所示:

string SQL = "SELECT FIRST @first SKIP @skip A.ID,B.SHORTNAME, A.DATETIME,
 A.COMPUTERNAME,A.OSLOGIN, A.DBLOGIN, A.INFOTYPE, A.INFO FROM EVENTSGENERAL A JOIN
 EVENTSGENERATORS B ON B.GENERATOR_ = A.GENERATOR_ ORDER BY {0}";
SQL = string.Format(SQL, orderBy);