การดำเนินการ SQL กับ AS400 ที่ระบุ *LIBL แทนที่จะเป็นไลบรารีเฉพาะ

ฉันมีข้อกำหนดในการดำเนินการ SQL พื้นฐาน (ในกรณีนี้คือส่วนแทรก) กับไฟล์บน AS400 ฉันกำลังเขียนไคลเอ็นต์แบบหนา แอปบรรทัดคำสั่งใน C# ที่ทำงานบน Windows 2008

หากฉันระบุไลบรารีและไฟล์ดังนี้:

insert into somelibrary.somefile (col1,col2) values val1,val2

แล้วมันได้ผล ปัญหาคือค่า somelibrary จะแตกต่างกันระหว่างผู้ใช้และสภาพแวดล้อม ฉันต้องการใช้รายการไลบรารี *LIBL เพื่อดึงไลบรารีใดก็ตามที่ผู้ใช้ได้รับการจัดสรรตามลำดับที่ถูกต้อง ฉันต้องการหลีกเลี่ยงการใช้ไฟล์การกำหนดค่าหากเป็นไปได้

ผู้ใช้ที่ฉันกำลังทดสอบด้วยมีไลบรารีซึ่งมี somefile ในรายการห้องสมุดของเขา ถ้าฉันลอง:

insert into somefile (col1,col2...) values val1,val2

ฉันได้รับข้อผิดพลาด:

ERROR [42S02] [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0204 - somefile in username type *FILE not found.

ฉันได้ลองเพิ่ม *LIBL ใน SQL และในสตริงการเชื่อมต่อด้วย แต่ไม่พบไฟล์ ฉันได้ลองใช้ชุดค่าผสมหลายอย่าง รวมถึงการใช้เครื่องหมายทับเพื่อแยกไลบรารีและไฟล์

ในกรณีที่เกี่ยวข้อง สตริงการเชื่อมต่อคือ:

Driver={Client Access ODBC Driver (32-bit)}; System=" + server + "; UID=" + DBUser + "; PWD=" + DBPassword + ";";

person Community    schedule 22.01.2013    source แหล่งที่มา
comment
แบบสอบถามนี้ใช้งานได้เมื่อทำงานผ่าน iSeries หรือไม่ (ฉันมีคู่มืออ้างอิง AS400 SQL ในงานเก่าของฉัน .. แท้จริงแล้ว 3 เดือนที่แล้ว!)   -  person Simon Whitehead    schedule 22.01.2013
comment
ใช่ทำงานได้ดีจากที่นั่น   -  person    schedule 22.01.2013
comment
ลองเพิ่ม Naming Convention=1 ลงในสตริงการเชื่อมต่อของคุณเพื่อสลับเข้าสู่โหมดการตั้งชื่อ *SYS   -  person dmc    schedule 22.01.2013
comment
ไม่มีการเปลี่ยนแปลง. มันเหมือนกับ 'naming=system' ในสตริงการเชื่อมต่อหรือไม่ และฉันควรเพิ่ม *LIBL ที่ไหนสักแห่งในสตริงการเชื่อมต่อด้วยหรือไม่ (ฉันเพิ่งลองใช้รูปแบบสองสามแบบที่นี่ แต่อาจพลาดไปหนึ่งรูปแบบ!)   -  person    schedule 22.01.2013
comment
dmc: ดูเหมือนว่าไดรเวอร์ของฉันจุกจิกและมีเพียง 'การตั้งชื่อ = 1' เท่านั้นที่จะทำได้ (ไม่ใช่ ' การตั้งชื่อ = ระบบ' หรือ 'แบบแผนการตั้งชื่อ = 1' ไชโย!   -  person    schedule 23.01.2013
comment
@โพลดี้. คุณสามารถเปลี่ยนได้ที่การตั้งค่า ODBC ที่แท็บเซิร์ฟเวอร์ คุณสามารถเปลี่ยน Naming Convention และตั้งค่ารายการไลบรารี: เป็น *usrlibl ฉันชอบใช้ผู้ให้บริการ .Net สำหรับผู้ให้บริการ .Net ให้ใช้ Naming=System;LibraryList=*USRLIBL;SchemaSearchList=*USRLIBL   -  person lamLam    schedule 23.01.2013
comment
lamLam: แท็บเซิร์ฟเวอร์คืออะไร?   -  person    schedule 23.01.2013
comment
เป็นที่ที่คุณกำหนด ODBC ของคุณ จากแผงควบคุม windows -› เครื่องมือการดูแลระบบ - แหล่งข้อมูล (ODBC) เลือกชื่อแหล่งข้อมูลของคุณ จากนั้นในแท็บที่สอง - แท็บเซิร์ฟเวอร์   -  person lamLam    schedule 25.01.2013
comment
lamLam: ฉันไม่ได้ทำแบบนั้นนะ ไม่มีการกำหนดค่า DSN หรือ ODBC ฉันติดตั้ง Client Access และใช้ไดรเวอร์จากที่นั่น แอปนี้จะได้รับการติดตั้งบนเซิร์ฟเวอร์จำนวนหนึ่ง และฉันพยายามหลีกเลี่ยงการเพิ่มรายการลงในรีจิสทรีหรือทำการเปลี่ยนแปลงด้วยตนเองในแต่ละกล่อง   -  person    schedule 25.01.2013


คำตอบ (1)


รายการไลบรารีที่ใช้สำหรับคำขอนี้คือรายการไลบรารีของโปรไฟล์ผู้ใช้ที่ใช้ในการตรวจสอบสิทธิ์ โปรไฟล์ผู้ใช้ชี้ไปที่สองรายการที่น่าสนใจเกี่ยวกับรายการห้องสมุด: คำอธิบายงานและโปรแกรมเริ่มต้น ตรวจสอบรายละเอียดงานเพื่อดูว่ารายชื่อห้องสมุดคืออะไร อาจไม่มีไลบรารี่ที่มี SOMEFILE นั่นจะออกจากโปรแกรมเริ่มต้น หากรายการไลบรารีถูกตั้งค่าไว้ในโปรแกรมเริ่มต้น คุณจะประสบปัญหา เนื่องจากโปรแกรมเริ่มต้นจะถูกดำเนินการเฉพาะเมื่อโปรไฟล์ลงชื่อเข้าใช้เซสชันเทอร์มินัลเท่านั้น

วิธีแก้ปัญหานี้คือการสร้างโปรไฟล์ผู้ใช้และรายละเอียดงานที่มีรายชื่อห้องสมุดที่คุณต้องการ

person Buck Calabro    schedule 22.01.2013
comment
รายละเอียดงานประกอบด้วย SOMELIBRARY (ซึ่งมี SOMEFILE) และฉันกำลังเรียกใช้คำสั่ง insert ผ่านแอป C# โดยไม่ได้ใช้เซสชันเทอร์มินัล ดังนั้นฉันจึงไม่แน่ใจว่าโปรแกรมเริ่มต้นถูกเรียกใช้หรือไม่ - person ; 22.01.2013
comment
เอาล่ะ ลงหนึ่งอัน หากคุณได้รับข้อความแสดงข้อผิดพลาดว่าไม่พบ SOMEFILE ใน USERNAME แสดงว่าคุณกำลังใช้หลักการตั้งชื่อ SQL แทนที่จะเป็น SYSTEM IBM เอกสารสนับสนุน 9951625 อธิบายสถานการณ์ - person Buck Calabro; 22.01.2013
comment
ฉันกำลังทำเครื่องหมายว่านี่เป็นคำตอบที่ชนะ - วิธีแก้ไขคือการเพิ่ม 'การตั้งชื่อ = 1' ก่อนที่ฉันจะโพสต์คำถามของฉัน ฉันลองใช้ 'naming=system' ซึ่งใช้งานไม่ได้ ดูเหมือนว่าตอนนี้เป็นเพียงสิ่ง jdbc เท่านั้นและใช้งานไม่ได้กับไดรเวอร์ Client Access ODBC ขอบคุณมาก! - person ; 23.01.2013