Cara Mengekspor AS400 Tabel ke file .csv - Bagaimana-Untuk

Cara Mengekspor AS400 Tabel ke file .csv

Saya menulis program ini karena tipe data untuk basis data DB2 kami tidak dikenali dengan benar oleh panduan ekspor impor SQL server. Saya perlu memasukkan data ke dalam format yang dapat dikelola sehingga saya dapat mengimpor ke SQL Server untuk pelaporan. Saya akui, saya bisa menghabiskan sedikit waktu untuk penanganan kesalahan, tetapi saya tidak punya waktu. Saya pikir saya akan memposting ini jika seseorang dapat menggunakannya. Itu benar-benar menyelamatkan saya karena iseries perlahan-lahan mati pada tahun lalu.

2 Langkah total

Langkah 1: Buat solusi vb.net di studio visual dan tempel ini ke module1.vb.

'
'Tidak semua Impor diperlukan di bagian ini, tetapi saya menempatkan mereka untuk akses yang lebih mudah ke kelas. Baris kode yang lebih pendek.
'
Opsi Eksplisit Aktif
Sistem Impor
Sistem Impor.IO
Mengimpor System.Configuration
Sistem Impor. Pembagian. Pembagian
Sistem Impor. Koleksi. Umum
Sistem Impor.Linq
Mengimpor System.Text
Mengimpor System.Text.Encoding
Sistem Impor. Penyesuaian
Sistem Impor. Perbandingan String
Sistem Impor Data
Impor System.Data.OleDb
Impor System.Data.SqlClient

Modul Modul1
Dim shell, tmp, fso, ts, rs1, rs2, rs, line, tableName, connectString, skema, dbConnIn, folder, file, server

Sub Utama ()
schema = "yourshema"
server = "server Anda"
connectString = "Dsn =" & server & "; uid = nama pengguna; kata sandi = kata sandi; sistem =" & server & "; dbq =" & skema & "; dftpkglib =" & skema & "; languageid = ENU; pkg =" & skema & "/ DEFAULT (IBM), 2,0,1,0,0;"
dbConnIn = CreateObject ("ADODB.Connection")
dbConnIn.CommandTimeout = 60000
dbConnIn.Open (connectString)
fso = CreateObject ("Scripting.FileSystemObject")

Mencoba
Dim tmp
rs = CreateObject ("ADODB.RecordSet")
rs.Open ("SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA =" & skema & "", dbConnIn)
rs.MoveFirst ()

tableName = ""

Untuk Setiap tmp Di rs.fields
Sementara tmp IsNot Nothing
tableName = tmp.Value.ToString
folder = "C: APLUS " & skema & ""
If Not fso.FolderExists (folder) Kemudian
fso.CreateFolder (folder)
Berakhir jika

Console.WriteLine (skema & "." & TableName)
Panggil getData (skema, tableName, dbConnIn, folder)
rs.MoveNext ()

Akhiri Sementara
Berikutnya

rs.close ()

Tangkap mantan sebagai Pengecualian

shell = CreateObject ("WScript.Shell")
fso = CreateObject ("Scripting.FileSystemObject")
ts = fso.OpenTextFile ("C: APLUS zzz-Error-" & tableName & ".csv", 2, Benar)
ts.WriteLine (ex)
ts.close ()

Akhiri Coba

End Sub

Sub getData (Skema ByVal As String, ByVal tableName As String, ByRef dbConnIn As Object, ByVal folder As String)

Mencoba
If Not fso.FileExists ("C: APLUS " & schema & "" & tableName & ".csv") Kemudian
rs1 = CreateObject ("ADODB.RecordSet")
rs1.Open ("Pilih * Dari" & tableName, dbConnIn)
shell = CreateObject ("WScript.Shell")
If Not vbNull Then
rs1.movefirst ()
Berakhir jika

fso = CreateObject ("Scripting.FileSystemObject")
ts = fso.OpenTextFile ("C: APLUS " & schema & "" & tableName & ".csv", 2, Benar)
line = ""

Untuk Setiap tmp2 Di rs1.Fields

line = line & tmp2.Name & ","

Berikutnya

ts.WriteLine (Kiri (baris, Len (baris) - 1))

Sementara Tidak rs1.EOF

line = ""

Untuk Setiap tmp1 Di rs1.Fields

'Console.WriteLine (tmp.Value.GetType ())
'Console.WriteLine (line.GetType ())
'Console.WriteLine (tmp.Value.ToString)
'Console.WriteLine (baris)
line = line & "" "" & Ganti (tmp1.Value.ToString, "" "", "" "" "" ") &" "", "

Berikutnya

ts.WriteLine (Kiri (baris, Len (baris) - 1))
If Not vbNull Then
rs1.MoveNext ()
Berakhir jika
Akhiri Sementara

rs1.close ()
ts.close ()
Berakhir jika
Tangkap mantan sebagai Pengecualian

shell = CreateObject ("WScript.Shell")
fso = CreateObject ("Scripting.FileSystemObject")
file = "C: APLUS " & skema & " zzz-Error-" & tableName & ".csv"
ts = fso.OpenTextFile ("C: APLUS " & schema & " zzz-Error-" & tableName & ".csv", 2, Benar)
ts.WriteLine (ex)
ts.close ()

Akhiri Coba

End Sub
Modul Akhir

Langkah 2: Klik Mulai dan pantau kemajuan

Butuh sedikit lebih dari 35 menit untuk 1,6GB / data. Saya yakin ada beberapa penyesuaian yang dapat dilakukan untuk membuatnya sedikit lebih efisien, tetapi saya bukan programmer penuh waktu dan tidak punya waktu untuk melakukan riset. Saya memposting ini berharap ini akan membantu seseorang yang mencoba untuk memindahkan data dari database DB2 pada sistem IBM iseries AS400 ke format yang dapat dikelola untuk SQL Server.

Jangan ragu untuk mengkritik atau melakukan perbaikan.