2012-11-19 13 views
18

के अंदर एसएसआईएस पैकेज चर का उपयोग कैसे करें मैं एक परियोजना पर काम कर रहा हूं, और मेरे सी # कोड के अंदर एसएसआईएस पैकेज चर का उपयोग करने की कोशिश कर रहा हूं, जिसे मैंने डेटा फ्लो -> स्क्रिप्ट घटक -> मेरा सी # स्क्रिप्टस्क्रिप्ट घटक

क्या कोई इस पर सहायता कर सकता है?

भी मैं जो भी

IDTSVariables100 varCollection = null; 
    this.VariableDispenser.LockForRead("User::FilePath"); 
    string XlsFile; 

    XlsFile = varCollection["User::FilePath"].Value.ToString(); 
+1

आप क्या त्रुटि या अप्रत्याशित व्यवहार कर रहे हैं? – billinkc

उत्तर

41

एक स्क्रिप्ट घटक (एक डेटा प्रवाह कार्य के) में पैकेज चर तक पहुंचना एक स्क्रिप्ट टास्क में पैकेज चर तक पहुँचने के रूप में ही नहीं है। एक स्क्रिप्ट घटक के लिए, आपको पहले Script Transformation Editor खोलने की आवश्यकता है (घटक पर राइट-क्लिक करें और "संपादित करें ..." चुनें)। स्क्रिप्ट टैब के कस्टम प्रॉपर्टी सेक्शन में, आप उन गुणों को दर्ज (या चुन सकते हैं) जिन्हें आप स्क्रिप्ट में उपलब्ध करना चाहते हैं, या तो केवल पढ़ने के लिए या रीड-राइट आधार पर: screenshot of Script Transformation Editor properties page फिर, स्क्रिप्ट के भीतर,

// Modify as necessary 
public override void PreExecute() 
{ 
    base.PreExecute(); 
    string thePath = Variables.FilePath; 
    // Do something ... 
} 

public override void PostExecute() 
{ 
    base.PostExecute(); 
    string theNewValue = ""; 
    // Do something to figure out the new value... 
    Variables.FilePath = theNewValue; 
} 

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    string thePath = Variables.FilePath; 
    // Do whatever needs doing here ... 
} 

एक महत्वपूर्ण चेतावनी: यदि आप लिखने एक पैकेज चर करने के लिए की जरूरत है, आप केवल विधि PostExecute() में ऐसा कर सकते हैं चर उपलब्ध चर के रूप में दृढ़ता से टाइप गुण आपत्ति हो जाएगा।

कोड स्निपेट के बारे में:

IDTSVariables100 varCollection = null; 
this.VariableDispenser.LockForRead("User::FilePath"); 
string XlsFile; 

XlsFile = varCollection["User::FilePath"].Value.ToString(); 

varCollection शून्य पर आरंभ नहीं हो जाता और एक मान्य मान पर सेट कभी नहीं। इस प्रकार, कोई भी अपमान करने का प्रयास यह असफल हो जाएगा।

String MyVar = Dts.Variables["MyVarName"].Value.ToString();

1
  • चर स्क्रिप्ट के सामने गुण पृष्ठ पर काम नहीं कर रहा, ReadOnlyVariables (या ReadWriteVariables) संपत्ति में संशोधन और चर आप में रुचि रखते हैं का चयन के साथ की कोशिश की है। यह स्क्रिप्ट काम के भीतर चयनित चर
  • कोड के भीतर आप अब उपयोग होगा सक्षम हो जाएगा के रूप में

    स्ट्रिंग myString = Variables.MyV चर पढ़ने के लिए ariableName.ToString();

+0

क्या यह अभी भी सही है? मुझे लगता है कि इन चरों तक पहुंच नहीं है –

0

जोरदार टाइप किया वर उपलब्ध होने लगते हैं नहीं है, मैं उन्हें करने के लिए पहुँच प्राप्त करने के बाद क्या करना है

IDTSVariables100 vars = null; 
VariableDispenser.LockForRead("System::TaskName"); 
VariableDispenser.GetVariables(vars); 
string TaskName = vars("System::TaskName").Value.ToString(); 
vars.Unlock(); 

आपका प्रारंभिक कोड में GetVariables() विधि की कॉल की कमी है।

+4

यह उत्तर स्क्रिप्ट कार्य (नियंत्रण प्रवाह के भीतर) से संबंधित प्रतीत होता है, जबकि प्रश्न एक स्क्रिप्ट _Component_ (डेटा प्रवाह के भीतर) से संबंधित है। – Sepster

0

मुझे ओपी के समान समस्या थी, सिवाय इसके कि मुझे ReadOnlyVariables घोषित करने के लिए याद किया गया था।

कुछ खेलने के बाद, मुझे पता चला कि यह मेरे चर का नाम था जो मुद्दा था। एसएसआईएस में "फाइल_Path" किसी भी तरह से "फ़ाइलपाथ" में परिवर्तित हो गया है। सी # परिवर्तनीय नामों में अंडरस्कोर के साथ अच्छी तरह से खेल नहीं है।

तो चर तक पहुँचने के लिए, मैं

string fp = Variables.FilePath; 

टाइप स्क्रिप्ट घटक की विधि PreExecute() में।

0

प्रथम सूची चर है कि आप स्क्रिप्ट कार्य संपादक में ReadOnlyVariables पर स्क्रिप्ट कार्य में उन्हें इस्तेमाल और स्क्रिप्ट

संपादित करने के लिए

String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString(); 

कोड की इस पंक्ति स्क्रिप्ट कोड में अपने ReadOnlyVariables उपयोग करना चाहते हैं एक स्ट्रिंग के रूप में एसएसआईएस पैकेज वैरिएबल का इलाज करेगा।