Mengeksekusi SQL terhadap AS400 dengan menentukan *LIBL daripada perpustakaan tertentu

Saya memiliki persyaratan untuk melakukan SQL dasar (sisipan, dalam hal ini) terhadap file di AS400. Saya sedang menulis klien tebal, aplikasi baris perintah dalam C# yang berjalan pada Windows 2008.

Jika saya menentukan perpustakaan dan file sebagai berikut:

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

maka itu berhasil. Masalahnya adalah nilai somelibrary akan berbeda antara pengguna dan lingkungan. Saya ingin menggunakan daftar perpustakaan *LIBL, sehingga dapat mengambil perpustakaan apa pun yang telah dialokasikan pengguna, dalam urutan yang benar. Saya ingin menghindari penggunaan file konfigurasi, jika memungkinkan.

Pengguna yang saya uji memiliki, dalam daftar perpustakaannya, perpustakaan yang berisi somefile. Jika saya mencoba:

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

Saya mendapatkan kesalahan:

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

Saya sudah mencoba menambahkan *LIBL di SQL, dan juga di string koneksi, tetapi tidak menemukan filenya. Saya sudah mencoba beberapa kombinasi, serta menggunakan garis miring untuk memisahkan perpustakaan dan file.

Jika relevan, string koneksinya adalah:

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

person Community    schedule 22.01.2013    source sumber
comment
Apakah kueri ini berfungsi saat dijalankan melalui iSeries? (Saya memiliki manual Referensi SQL AS400 di pekerjaan lama saya.. secara harfiah 3 bulan yang lalu!)   -  person Simon Whitehead    schedule 22.01.2013
comment
Ya, berfungsi dengan baik dari sana.   -  person    schedule 22.01.2013
comment
Coba tambahkan Naming Convention=1 ke string koneksi Anda untuk beralih ke mode penamaan *SYS.   -  person dmc    schedule 22.01.2013
comment
Tidak ada perubahan. Apakah itu sama dengan 'penamaan=sistem' pada string koneksi? Dan haruskah saya menambahkan *LIBL di suatu tempat di string koneksi juga? (Saya baru saja mencoba beberapa variasi di sini tetapi mungkin melewatkan satu variasi!).   -  person    schedule 22.01.2013
comment
dmc: Sepertinya driver saya rewel dan hanya 'naming=1' yang bisa digunakan (bukan 'naming=system' atau 'naming Convention=1'. Cheers!   -  person    schedule 23.01.2013
comment
@Poldie. Anda juga dapat mengubah pada pengaturan ODBC di Tab Server, Anda dapat mengubah Konvensi Penamaan dan mengatur Library list: menjadi *usrlibl . Saya lebih suka menggunakan penyedia .Net. Untuk penyedia .Net gunakan Naming=System;LibraryList=*USRLIBL;SchemaSearchList=*USRLIBL   -  person lamLam    schedule 23.01.2013
comment
lamLam: Apa itu Tab Server?   -  person    schedule 23.01.2013
comment
Di situlah Anda mendefinisikan ODBC Anda. Dari panel kontrol windows -›Alat administratif -›Sumber Data (ODBC). Pilih nama sumber data Anda, lalu di tab kedua - tab Server   -  person lamLam    schedule 25.01.2013
comment
lamLam: Aku tidak melakukan itu. Tidak ada konfigurasi DSN atau ODBC. Saya menginstal Akses Klien dan menggunakan driver dari sana. Aplikasi ini akan diinstal pada sejumlah server dan saya selalu berusaha menghindari keharusan menambahkan entri ke registri atau membuat perubahan manual pada masing-masing kotak.   -  person    schedule 25.01.2013


Jawaban (1)


Daftar perpustakaan yang digunakan untuk permintaan ini adalah daftar perpustakaan profil pengguna yang digunakan untuk mengautentikasi. Profil pengguna menunjuk ke dua item yang menarik sehubungan dengan daftar perpustakaan: Deskripsi Pekerjaan dan Program Awal. Periksa deskripsi pekerjaan untuk melihat daftar perpustakaannya. Mungkin, perpustakaannya tidak berisi SOMEFILE. Itu meninggalkan program awal. Jika daftar perpustakaan diatur dalam program awal, Anda mempunyai masalah, karena program awal hanya dijalankan ketika profil masuk ke sesi terminal.

Cara mengatasinya adalah dengan membuat profil pengguna dan deskripsi pekerjaan yang memiliki daftar perpustakaan yang Anda perlukan.

person Buck Calabro    schedule 22.01.2013
comment
Deskripsi pekerjaan memang mengandung SOMELIBRARY (yang berisi SOMEFILE). Dan saya menjalankan pernyataan penyisipan melalui aplikasi C#, tidak menggunakan sesi terminal, jadi saya tidak yakin program awal dipanggil. - person ; 22.01.2013
comment
Ya, satu jatuh. Jika Anda mendapatkan pesan kesalahan bahwa SOMEFILE di USERNAME tidak ditemukan maka Anda menggunakan konvensi penamaan SQL daripada SISTEM. dokumen dukungan 9951625 IBM menjelaskan situasinya. - person Buck Calabro; 22.01.2013
comment
Saya menandai ini sebagai jawaban pemenang - solusinya adalah menambahkan 'penamaan=1'. Bahkan sebelum saya memposting pertanyaan saya, saya mencoba 'naming=system' yang tidak berhasil. Tampaknya sekarang ini hanya masalah jdbc dan tidak berfungsi dengan Driver ODBC Akses Klien. Terimakasih banyak! - person ; 23.01.2013