Membatasi jumlah baris dalam kueri OleDbDataAdapter

Saya menggunakan C# dan .NET 2.0. Saya membuat OleDbDataAdapter untuk mengimpor file yang dibatasi tab dan dalam SQL untuk salah satu perintah saya, saya menambahkan 'LIMIT 1' di akhir kueri.

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

Saya menjalankan kueri dan program saya mengeluarkan pengecualian, System.Data.OleDb.OleDbException: Kesalahan sintaksis (operator hilang) dalam ekspresi kueri 'ZipCode LIMIT 1'.

Saya baru saja menjalankan beberapa tes sekarang tapi saya penasaran mengapa itu tidak berhasil atau apakah ada cara alternatif untuk membatasi jumlah baris yang dikembalikan. Saya bekerja dengan file yang memiliki puluhan ribu baris dan terkadang mungkin perlu membatasi jumlah baris yang dikembalikan.


person Ryan Rodemoyer    schedule 01.07.2010    source sumber
comment
Basis data apa yang sedang Anda lawan? SQL untuk membatasi baris yang dikembalikan berbeda-beda bergantung pada database backend. OleDB tidak mengabstraksi cita rasa SQL.   -  person Chris Taylor    schedule 01.07.2010
comment
Tidak terlalu menentang database apa pun, saya membuat DataSet dari file yang dibatasi tab.   -  person Ryan Rodemoyer    schedule 01.07.2010
comment
Jadi saya asumsikan Anda menggunakan penyedia Microsoft.Jet.OLEDB. Saya tidak tahu, tetapi Anda dapat mencoba pernyataan TOP sesuai contoh SQL Server dalam jawaban saya yang mungkin berhasil.   -  person Chris Taylor    schedule 01.07.2010
comment
Ya, saya menggunakan Microsoft.Jet.OLEDB sebagai penyedia saya.   -  person Ryan Rodemoyer    schedule 01.07.2010


Jawaban (1)


Sesuai komentar saya, jawabannya tergantung pada DB backend

Untuk SQL Server Anda akan menggunakan TOP

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

Untuk Oracle, Anda perlu menggunakan ROWNUM di klausa Where yang menanyakan sub-pilihan. Sesuatu seperti ini (belum diuji)

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

Dan seterusnya, tergantung pada DB backend Anda.

person Chris Taylor    schedule 01.07.2010
comment
Dalam contoh pertama Anda, ini adalah SELECT DISTINCT TOP 1. - person Ryan Rodemoyer; 02.07.2010