2012-11-27 28 views
5

मैं अब दिनों के लिए समाधान खोज रहा हूं और मुझे अभी भी एक नहीं लगता है। मुझे अपने स्क्रिप्ट घटक में कनेक्शन प्राप्त करने में समस्या है। मैं अपने डेटाबेस क्वेरी करने के लिए एक आईडी पुनः प्राप्त किये जाने से पहले मैंएसएसआईएस स्क्रिप्ट घटक कनेक्शन

public override void AcquireConnections(object Transaction) 
{ 
    connMgr = base.Connections.Connection; 
    conn = (SqlConnection)connMgr.AcquireConnection(null); 
} 

में डालने की जरूरत है मैं एक अपवाद यहाँ मिलता है।

System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to class type 'System.Data.SqlClient.SqlConnection'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface. 

कोई समाधान?

उत्तर

4

उन है कि एक स्क्रिप्ट घटक में यह करने के लिए सक्षम होना चाहते हैं के लिए:

  1. डबल स्क्रिप्ट घटक "स्क्रिप्ट परिवर्तन संपादक"
  2. "कनेक्शन प्रबंधक" सूची आइटम पर क्लिक करें खोलने के लिए क्लिक करें।
  3. एक नया कनेक्शन प्रबंधक जोड़ें। मौजूदा ADO.NET कनेक्शन प्रबंधक का चयन करें।
  4. "स्क्रिप्ट" सूची आइटम पर क्लिक करें और फिर "स्क्रिप्ट संपादित करें ..." बटन पर क्लिक करें।

आपके पास अपनी स्क्रिप्ट के अंदर कुछ इस तरह कर सकते हैं:

using (SqlConnection connection = this.Connections.Connection.AcquireConnection(null) as SqlConnection) 
{ 
    using (SqlCommand command = connection.CreateCommand()) 
    { 
     command.CommandText = "SELECT [Value] FROM dbo.MyTable"; 
     command.CommandType = CommandType.Text; 

     using (SqlDataReader reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       ProfanityWords.Add(reader.GetValue(0).ToString()); 
      } 
     } 
    } 

    this.Connections.Connection.ReleaseConnection(connection); 
} 

enter image description here

2

ADO.NET कनेक्शन प्रबंधक को बनाया जाना चाहिए और SqlConnection पर कास्ट टाइप करने के लिए कोड में संदर्भित किया जाना चाहिए। अगर आपके पास एसएसआईएस पॅककेज में एडीओ.NET कनेक्शन नहीं है तो आपको टाइपकास्ट अपवाद मिलेगा। यदि आप SqlConnection का उपयोग करना चाहते हैं तो निम्नलिखित चरणों का उपयोग किया जाना चाहिए।

  1. ADO.NET कनेक्शन बनाएं।
  2. अपने कोड में निम्न पंक्ति का उपयोग करें।

    var connObj = Dts.Connections["ADO.NETConnectionName"].AcquireConnection(null); 
    
    var sqlConn = (SqlConnection)connObj; 
    
  3. एक बार जब आप अपने SQL कनेक्शन के साथ करते हैं। अपने कनेक्शन को बंद/रिलीज़ करने के लिए निम्न कोड का उपयोग करें।

    Dts.Connections["ADO.NETConnectionName"].ReleaseConnection(connObj); 
    

आशा इस मदद करता है।

+0

उत्तर के लिए धन्यवाद, लेकिन मेरी मुख्य समस्या यह है कि मैं कक्षा में "DTS" वस्तु को देखने न है। भले ही मैं संदर्भ में .dts शामिल करता हूं। –

+0

उत्तर स्क्रिप्ट घटक के लिए प्रासंगिक नहीं है, जिसके लिए प्रश्न पूछा जाता है। इसके बजाय यह थोड़ा अलग स्क्रिप्ट कार्य के बारे में है। –

+0

@ MaximV.Pavlov की टिप्पणी पर विस्तृत करने के लिए - एक स्क्रिप्ट _component_ (जो डेटाफ्लो कार्य के भीतर मौजूद है) से संबंधित प्रश्न, जबकि यह उत्तर एक स्क्रिप्ट _task_ (जो नियंत्रण प्रवाह के भीतर मौजूद है) से संबंधित है। – Sepster