Сортировать по параметру Firebird + C # - PullRequest
1 голос
/ 29 ноября 2011

В настоящее время я пишу метод, который считывает дату из базы данных 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"}

Я пытался изменить toe FbDbType на «Text», но все еще не работает.Извините за любой плохой английский.Заранее благодарим за любую помощь.

1 Ответ

1 голос
/ 29 ноября 2011

Для поля 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);
...