我目前正在编写一个从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”,但仍无法正常工作。 抱歉任何不好的英语。 提前感谢您提供的任何帮助。
答案 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);