按参数排序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为"文本",但仍然不工作。很抱歉我的英语不好。
对于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);