【问题标题】:Order By Parameter Firebird + C#按参数排序 Firebird + C#
【发布时间】:2011-11-29 14:41:29
【问题描述】:

我目前正在编写一个从 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 参数,它就会引发异常:

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

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

【问题讨论】:

  • 刚试过:cmd.Parameters.Add (new FbParameter("@orderBy", FbDbType.VarChar, 50)).Value = orderBy;还是不行。

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


【解决方案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);

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多