การจำกัดจำนวนแถวในแบบสอบถาม OleDbDataAdapter

ฉันใช้ C# และ .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
ไม่ได้เทียบกับฐานข้อมูลใด ๆ ฉันสร้างชุดข้อมูลจากไฟล์ที่คั่นด้วยแท็บ   -  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 ในส่วนคำสั่งซึ่งจะสอบถามกับการเลือกย่อย บางอย่างเช่นนี้ (ยังไม่ได้ทดสอบ)

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