按参数排序Firebird + c#

本文关键字:Firebird 排序 参数 | 更新日期: 2023-09-27 18:16:10

我目前正在编写一个从火鸟数据库读取日期的方法。这里是Header:

 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;

问题是:前两个参数工作(first和skip准备正确),我已经测试过了。但是,一旦我尝试运行order参数,它就会引发异常:

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

我试图改变脚趾FbDbType为"文本",但仍然不工作。很抱歉我的英语不好。

按参数排序Firebird + c#

对于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);