Ограничение количества строк в запросе OleDbDataAdapter

Я использую С# и .NET 2.0. Я создал OleDbDataAdapter для импорта файла с разделителями табуляции, а в SQL для одной из моих команд я добавляю «LIMIT 1» в конец запроса.

string query = string.Format("SELECT DISTINCT * 
                                FROM {0} 
                              ORDER BY ZipCode 
                              LIMIT 1", tableName);

Я запускаю запрос, и моя программа выдает исключение System.Data.OleDb.OleDbException: синтаксическая ошибка (отсутствует оператор) в выражении запроса «ZipCode LIMIT 1».

Сейчас я просто запускаю некоторые тесты, но мне любопытно, почему это не работает или есть ли альтернативный способ ограничить количество возвращаемых строк. Я работаю с файлами, содержащими десятки тысяч строк, и иногда может потребоваться ограничить количество возвращаемых строк.


person Ryan Rodemoyer    schedule 01.07.2010    source источник
comment
С какой базой данных вы работаете? SQL для ограничения возвращаемых строк различается в зависимости от серверной базы данных. OleDB не абстрагируется от SQL.   -  person Chris Taylor    schedule 01.07.2010
comment
На самом деле не против какой-либо базы данных, я создал DataSet из файла с разделителями табуляции.   -  person Ryan Rodemoyer    schedule 01.07.2010
comment
Итак, я предполагаю, что вы используете поставщика Microsoft.Jet.OLEDB. Я не знаю, но вы можете попробовать оператор TOP в соответствии с примером SQL Server в моем ответе, который может сработать.   -  person Chris Taylor    schedule 01.07.2010
comment
Да, я использую Microsoft.Jet.OLEDB в качестве поставщика.   -  person Ryan Rodemoyer    schedule 01.07.2010


Ответы (1)


Согласно моему комментарию, ответ зависит от серверной БД.

Для SQL Server вы будете использовать TOP

string query = string.Format("SELECT DISTINCT TOP 1 *  
                              FROM {0}  
                              ORDER BY ZipCode", tableName);

Для Oracle вам нужно будет использовать ROWNUM в предложении where, которое запрашивает подзапрос. Что-то вроде этого (не проверено)

string query = string.Format("SELECT * FROM (SELECT DISTINCT *  
                              FROM {0}  
                              ORDER BY ZipCode) where ROWNUM = 1", tableName);

И так далее, в зависимости от вашей серверной БД.

person Chris Taylor    schedule 01.07.2010
comment
В вашем первом примере это будет SELECT DISTINCT TOP 1. - person Ryan Rodemoyer; 02.07.2010