Cara Mengeksport Jadual AS400 ke fail .csv - Bagaimana Untuk

Cara Mengeksport Jadual AS400 ke fail .csv

Saya menulis program ini kerana jenis data untuk pangkalan data DB2 kami tidak diakui dengan betul oleh wizard eksport import pelayan SQL. Saya perlu untuk mendapatkan data ke dalam format yang boleh diuruskan supaya saya boleh mengimport ke SQL Server untuk melaporkan. Saya akan mengakui, saya boleh menghabiskan lebih sedikit masa mengenai pengendalian ralat, tetapi saya tidak mempunyai masa. Saya fikir saya akan menyiarkannya sekiranya seseorang boleh menggunakannya. Ia benar-benar menyelamatkan saya sebagai persediaan makanan secara perlahan-lahan mati pada tahun lalu.

2 langkah total

Langkah 1: Buat penyelesaian vb.net di studio visual dan tampal ini ke module1.vb.

'
'Tidak semua Import diperlukan di bahagian ini, tetapi saya meletakkan mereka untuk akses yang lebih mudah ke kelas. Barisan kod yang lebih pendek.
'
Pilihan Eksplisit Pada
Sistem Import
Import System.IO
Sistem Import.Konfigurasi
Imports System.Threading.Thread
Import System.Collections.Generic
Import System.Linq
Sistem Import.Teks
Import System.Text.Encoding
Imports System.Reflection
Import System.StringComparison
Import System.Data
Import System.Data.OleDb
Import System.Data.SqlClient

Modul Module1
Cangkerang, tmp, fso, ts, rs1, rs2, rs, baris, tableName, connectString, skema, dbConnIn, folder, fail, pelayan

Sub Main ()
skema = "yourshema"
server = "yourserver"
connectString = "Dsn =" & server & "; uid = username; password = password; system =" & server & "; dbq =" & schema & "; dftpkglib =" & schema & & skema & "/ DEFAULT (IBM), 2,0,1,0,0;"
dbConnIn = CreateObject ("ADODB.Connection")
dbConnIn.CommandTimeout = 60000
dbConnIn.Open (connectString)
fso = CreateObject ("Scripting.FileSystemObject")

Cuba
Tmp Dim
rs = CreateObject ("ADODB.RecordSet")
rs.Open ("SELECT TABLE_NAME DARI information_schema.tables WHERE TABLE_SCHEMA =" & schema & "", dbConnIn)
rs.MoveFirst ()

tableName = ""

Untuk Setiap tmp Di rs.fields
Walaupun tmp IsNot Tiada apa-apa
tableName = tmp.Value.ToString
folder = "C: APLUS " & skema & ""
Jika Tidak fso.FolderExists (folder) Kemudian
fso.CreateFolder (folder)
Akhir Jika

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

Akhir Sementara
Seterusnya

rs.close ()

Tangkap bekas 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 ()

Tamat Akhir

Sub Akhir

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

Cuba
Jika Tidak fso.FileExists ("C: APLUS " & skema & "" & tableName & ".csv") Kemudian
rs1 = CreateObject ("ADODB.RecordSet")
rs1.Open ("Pilih * Dari" & tableName, dbConnIn)
shell = CreateObject ("WScript.Shell")
Sekiranya Tidak vbNull Kemudian
rs1.movefirst ()
Akhir Jika

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

Untuk Setiap tmp2 Dalam rs1.Fields

line = line & tmp2.Name & ","

Seterusnya

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

Walaupun Tidak rs1.EOF

line = ""

Untuk Setiap tmp1 Dalam rs1.Fields

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

Seterusnya

ts.WriteLine (Kiri (garis, Len (baris) - 1))
Sekiranya Tidak vbNull Kemudian
rs1.MoveNext ()
Akhir Jika
Akhir Sementara

rs1.close ()
ts.close ()
Akhir Jika
Tangkap bekas sebagai Pengecualian

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

Tamat Akhir

Sub Akhir
Modul Akhir

Langkah 2: Klik Mula dan lihat kemajuan

Ia mengambil masa lebih kurang 35 minit untuk 1.6GB / data. Saya pasti ada tweak yang boleh dibuat untuk menjadikannya lebih cekap, tetapi saya bukan seorang programmer sepenuh masa dan tidak mempunyai masa untuk penyelidikan. Saya memaparkan ini berharap ia akan membantu seseorang yang cuba memindahkan data dari pangkalan data DB2 ke sistem iseri IBM AS400 ke format yang boleh diuruskan untuk SQL Server.

Jangan berasa bebas untuk mengkritik atau membuat penambahbaikan.