Загрузить файлы на мэйнфреймы с VB.net - PullRequest
1 голос
/ 29 октября 2009

Я пытаюсь загрузить файл с моего компьютера на мэйнфреймы. Я пытаюсь загрузить его с помощью Chilkat FTP2. Ниже приведен код.

я пытаюсь загрузить файл 2009102600000

Dim ftp As New Chilkat.Ftp2()

Dim success As Boolean

' Any string unlocks the component for the 1st 30-days.'
success = ftp.UnlockComponent("Anything for 30-day trial")
If (success <> true) Then
    MsgBox(ftp.LastErrorText)
    Exit Sub
End If


ftp.Hostname = "www.myside.com"
ftp.Username = "****"
ftp.Password = "****"

' The default data transfer mode is "Active" as opposed to "Passive".'
' Change it to Passive by setting the Passive property:'
ftp.Passive = true

' Connect and login to the FTP server.'
success = ftp.Connect()
If (success <> true) Then
    MsgBox(ftp.LastErrorText)
    Exit Sub
End If


' Change to the remote directory where the file will be uploaded.'
success = ftp.ChangeRemoteDir("ABC.SITEUPLOAD.UPLOAD")
If (success <> true) Then
    MsgBox(ftp.LastErrorText)
    Exit Sub
End If


' Upload a file.'
Dim localFilename As String
localFilename = "c:\2009102600000"
Dim remoteFilename As String
remoteFilename = "2009102600000"

success = ftp.PutFile(localFilename,remoteFilename)
If (success <> true) Then
    MsgBox(ftp.LastErrorText)
    Exit Sub
End If


ftp.Disconnect()

MsgBox("File Uploaded!")

Я получаю ошибку: набор данных не найден, используйте имя MVS dsn или что-то в этом роде.

Буду очень признателен, если вы поможете мне с этим, пожалуйста.

Ответы [ 2 ]

2 голосов
/ 29 октября 2009

Я совсем не уверен, что вы можете рассматривать префиксы набора данных как каталоги. Когда я делаю выгрузку на мэйнфрейм с помощью ftp, я всегда просто указываю полное имя цели. Я бы избавился от

ftp.ChangeRemoteDir("ABC.SITEUPLOAD.UPLOAD")

раздел в целом и просто изменить:

remoteFilename = "2009102600000"

до:

remoteFilename = "'ABC.SITEUPLOAD.UPLOAD.2009102600000'"

, если это набор данных, или:

remoteFilename = "'ABC.SITEUPLOAD.UPLOAD(2009102600000)'"

если это член (в этом случае набор данных должен существовать первым).

Также было бы полезно, если бы вы изменили операторы MsgBox, чтобы они включали указание на , что на самом деле вызывает ошибку. Что-то вроде:

MsgBox("Connect error: " & ftp.LastErrorText)
MsgBox("ChangeRemoteDir error: " & ftp.LastErrorText)
MsgBox("PutFile error: " & ftp.LastErrorText)

вместо общего:

MsgBox(ftp.LastErrorText)

Еще один момент: вы заметите, что я поставил одиночные кавычки вокруг целей выше. Это потому, что z / OS имеет привычку (иногда) ставить префикс вашего имени для входа в систему. Может быть так:

put xyz.txt upload(xyz)

на самом деле пытается поместить его в yourname.upload(xyz). Цитирование это предотвратит.

Обновление: Знаете, я только что заметил что-то, что полностью ускользнуло от меня, когда я впервые прочитал этот вопрос. В сообщении об ошибке все ясно.

Сегменты имен наборов данных и имена элементов в разделенных наборах данных ограничены 8 символами. Следовательно, ваш 'ABC.SITEUPLOAD.UPLOAD(2009102600000)' недействителен на двух счетах, SITEUPLOAD и 2009102600000. Попробуйте сократить имена и перенести заново.

Вот доказательство:

C:\Documents and Settings\Pax> ftp bigiron
Connected to bigiron.box.com.
220-FTPD1 IBM FTP CS V1R9 at BIGIRON.BOX.COM, 02:15:23 on 2009-11-06.
220 Connection will close if idle for more than 5 minutes.
User (bigiron.box.com:(none)): pax
331 Send password please.
Password:
230 PAX is logged on.  Working directory is "PAX.".

ftp> put test.txt 'pax.siteupload'
200 Port request OK.
501 Invalid data set name "'pax.siteupload'".  Use MVS Dsname conventions.

ftp> put test.txt 'pax.siteupld'
200 Port request OK.
125 Storing data set PAX.SITEUPLD
250 Transfer completed successfully.
ftp: 177 bytes sent in 0.00Seconds 177000.00Kbytes/sec.

ftp> put test.txt 'pax.jcl(abcdefghi)'
200 Port request OK.
501 Invalid data set name "'pax.jcl(abcdefghi)'".  Use MVS Dsname conventions.

ftp> put test.txt 'pax.jcl(abcdefgh)'
200 Port request OK.
125 Storing data set PAX.JCL(ABCDEFGH)
250 Transfer completed successfully.
ftp: 177 bytes sent in 0.00Seconds 177000.00Kbytes/sec.

ftp> bye
221 Quit command received. Goodbye.
0 голосов
/ 06 ноября 2009

Вы уверены, что вам не нужно хранить его как набор данных поколений из корневого каталога? Как это:

'ABC.SITEUPLOAD.UPLOAD.2009102600000(+1)'
...