मैं एक एसएसआईएस परियोजना में एक बड़ी समस्या के साथ हूँ।

जब मैं एसएसआईएस स्थानीय मशीन में प्रोजेक्ट निष्पादित करता हूं तो डीटीएसएक्स अच्छी तरह से चलता है, लेकिन जब मैं इसे SQL एजेंट जॉब में डालता हूं तो यह मुझे एक त्रुटि देता है:

स्रोत: फोल्डर में फाइल? विवरण: एक आमंत्रण के लक्ष्य से अपवाद फेंक दिया गया है। अंतिम त्रुटि त्रुटि: 2020-10-02 17:37:05.33 कोड: 0x00000001 स्रोत: स्क्रिप्ट कार्य 1 विवरण: एक आमंत्रण के लक्ष्य द्वारा अपवाद को फेंक दिया गया है। अंतिम त्रुटि DTExec: पैकेज निष्पादन DTSER_FAILURE (1) लौटा। प्रारंभ: 17:37:01 समाप्त: 17:37:05 बीत गया: 3.687 सेकंड। पैकेज निष्पादन विफल रहा। चरण विफल रहा।

स्रोत फ़ाइल में फ़ोल्डर इस कोड के साथ एक स्क्रिप्ट कार्य है:

    Dim StrFolderArrary As String()
    Dim StrFileArray As String()
    Dim fileName As String
    Dim RemoteDirectory As String

    RemoteDirectory = Dts.Variables("User::ftp_masks").Value.ToString()

    Dim cm As ConnectionManager = Dts.Connections("FTP Connection Manager") 'FTP connection manager name
    Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing))

    Try
        ftp.Connect() 'Connecting to FTP Server

        ftp.SetWorkingDirectory(RemoteDirectory) 'Provide the Directory on which you are working on FTP Server

        ftp.GetListing(StrFolderArrary, StrFileArray) 'Get all the files and Folders List

        'If there is no file in the folder, strFile Arry will contain nothing, so close the connection.

        If StrFileArray Is Nothing Then

            MessageBox.Show(Dts.Variables("User::FileExistsFlg").Value.ToString())

            Dts.Variables("User::FileExistsFlg").Value = 0

            ftp.Close()


            'If Files are there, Loop through the StrFileArray arrary and insert into table
        Else

            For Each fileName In StrFileArray

                MessageBox.Show(fileName)
                Dts.Variables("User::files").Value = fileName
                MessageBox.Show(Dts.Variables("User::files").Value.ToString())
                If fileName = Dts.Variables("User::files").Value.ToString() Then
                    Dts.Variables("User::FileExistsFlg").Value = 1
                    MessageBox.Show(Dts.Variables("User::FileExistsFlg").Value.ToString())
                End If
            Next
            Dts.TaskResult = ScriptResults.Success

            ftp.Close()

        End If

        MessageBox.Show("End try")

    Catch ex As Exception

        MessageBox.Show("Catch")
        Dts.Events.FireError(0, "My File Task", ex.Message, String.Empty, 0)
        MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace)
        Throw New ApplicationException("Something happened :(", ex)
        'Dts.TaskResult = ScriptResults.Failure
    Finally
        ' This line executes whether or not the exception occurs.
        MessageBox.Show("in Finally block")

    End Try

    '
    ' Add your code here
    '
    Dts.TaskResult = ScriptResults.Success

क्या कोई मेरी मदत कर सकता है? मैं विशिष्ट त्रुटि कैसे देखूं?

आपके समय के लिए शुक्रिया।

0
Ricardo Gonçalves 2 अक्टूबर 2020, 19:43

1 उत्तर

सबसे बढ़िया उत्तर

आपके कोड के साथ चुनौतियों में से एक MessageBox का उपयोग है। यह एक इंटरैक्टिव यूआई तत्व है। जब कोई SSIS पैकेज अनअटेंडेड मोड में चलता है तो आप उनका उपयोग नहीं कर सकते क्योंकि सर्वर पर एक पॉपअप होगा, जब तक कि कोई लॉग इन नहीं करता और "ओके" पर क्लिक नहीं करता, तब तक सभी प्रगति को अवरुद्ध करता है। हाँ, यह पूरी तरह से डीटीएस के दिनों (2005 से पहले) में हुआ था।

अपने पॉपअप को बनाए रखने का एक तरीका इंटरएक्टिव मोड के सिस्टम स्कोप्ड वेरिएबल के लिए परीक्षण करना है। आपको इसे केवल पढ़ने के लिए चर सूची में जांचना होगा और फिर अपना कोड संशोधित करना होगा:

वीबी अनुमानित

' This is not valid VB syntax but I can't remember their declaration/initialization sytnax
Dim interactiveMode as Boolean =  (bool) Dts.Variables["System::InteractiveMode"].Value

if interactiveMode then
    MessageBox.Show(fileName)
End If

इससे बेहतर तरीका है सूचना संदेश उठाना . दोनों में उन कामों ने एक अप्राप्य मोड में भाग लिया।

यह सी # है, वीबी सिंटैक्स में कनवर्ट करने के लिए आपका स्वागत है

bool fireAgain = false;
string message = "{0}:{1}";

Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, "RemoteDirectory", RemoteDirectory), string.Empty, 0, ref fireAgain);

Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, "fileName", fileName), string.Empty, 0, ref fireAgain);

वह सूचना लॉग को दूरस्थ निर्देशिका और फ़ाइलनाम मानों में डंप कर देगा। वीएस में, यह आउटपुट विंडो के साथ-साथ पैकेज निष्पादन परिणाम ग्राफिकल विंडो में दिखाई देगा। सर्वर पर, वह SSISDB.catalog.OperationMessages पर डंप हो जाएगा

उस सब ने कहा, और क्या हो सकता है?

  • मुझे याद है कि अगर फ़ोल्डर खाली है तो FTP क्लाइंट अपवाद फेंक देगा।
  • सर्वर में एक फ़ायरवॉल/एंटी-वायरस हो सकता है जो पोर्ट 22/23 (ftp) के लिए आउटबाउंड एक्सेस को अवरुद्ध करता है।
  • कनेक्शन प्रबंधक की आपकी तात्कालिकता एक अपवाद फेंक सकती है
  • FTP क्लाइंट कनेक्शन के साथ ही।
  • यदि यह अनाम पहुंच नहीं है, तो यह हो सकता है कि कोड के सर्वर संस्करण को क्रेडेंशियल जानकारी नहीं मिल रही है क्योंकि इसे आधार पैकेज से मिटा दिया गया था जब इसे तैनात किया गया था
0
billinkc 2 अक्टूबर 2020, 20:10