2012-11-27 19 views
5

Sono stato alla ricerca di una soluzione per giorni e ora ho ancora cant sembrano trovare uno. Ho un problema nell'acquisire una connessione nel mio componente Script. Ho bisogno di interrogare il mio database per recuperare un ID da utilizzare prima di inserirlo nelSSIS Script Component connessione

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

ottengo un'eccezione qui.

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. 

Qualsiasi soluzione?

risposta

4

Per coloro che vogliono essere in grado di fare questo in un componente script:

  1. fare doppio clic sul componente script per aprire il "Script Editor trasformazione"
  2. Fare clic sulla voce lista "I manager di collegamento".
  3. Aggiungere un nuovo Connection Manager. Seleziona un gestore connessioni ADO.NET esistente.
  4. Fare clic sulla voce dell'elenco "Script" e quindi sul pulsante "Modifica script ...".

si può fare qualcosa di simile all'interno del vostro script:

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

connessione ADO.NET mangiatoia deve essere creato e fare riferimento nel codice di digitare cast del SqlConnection. Se non si dispone della connessione ADO.NET nel pakage di SSIS, verrà visualizzata l'eccezione TypeCast. I seguenti passaggi dovrebbero essere utilizzati se si desidera utilizzare SqlConnection.

  1. Creare la connessione ADO.NET.
  2. Utilizzare la seguente riga nel codice.

    var connObj = Dts.Connections["ADO.NETConnectionName"].AcquireConnection(null); 
    
    var sqlConn = (SqlConnection)connObj; 
    
  3. Una volta che hai fatto con la connessione SQL. Utilizzare il seguente codice per chiudere/rilasciare la connessione.

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

Spero che questo aiuti.

+0

Grazie per la risposta, ma il mio problema principale è che non vedo l'oggetto "DTS" nella classe. Anche se includo i .dts nei riferimenti. –

+0

La risposta non è rilevante per Script Component, per cui viene posta la domanda. Piuttosto si tratta di una Script Task leggermente diversa. –

+0

di elaborare su @ commento MaximV.Pavlov s' - la questione relativa a un _component_ copione (che esiste all'interno di un compito flusso di dati), che tale risposta si riferisce a un _task_ sceneggiatura (che esiste all'interno del flusso di controllo). – Sepster