2012-11-27 2 views
5

Je recherche une solution depuis des jours et je n'arrive toujours pas à en trouver une. J'ai un problème pour acquérir une connexion dans mon composant Script. Je dois interroger ma base de données pour récupérer un code à utiliser avant de l'insérer dans leSSIS Script Component connection

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

Je reçois une exception ici.

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. 

Des solutions?

Répondre

4

Pour ceux qui veulent être en mesure de le faire dans un composant Script:

  1. Double cliquez sur le composant Script pour ouvrir le « Script Editor de transformation »
  2. Cliquez sur l'élément de la liste « Gestionnaires de connexions ».
  3. Ajouter un nouveau Gestionnaire de connexions. Sélectionnez un gestionnaire de connexions ADO.NET existant.
  4. Cliquez sur l'élément de la liste "Script", puis sur le bouton "Modifier le script ...".

Vous pouvez faire quelque chose comme ça dans votre 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

Le gestionnaire de connexion ADO.NET doit être créé et se référer au code pour taper cast au SqlConnection. Si vous n'avez pas la connexion ADO.NET dans votre pakcage SSIS, vous obtiendrez l'exception TypeCast. Les étapes suivantes doivent être utilisées si vous voulez utiliser SqlConnection.

  1. Créez la connexion ADO.NET.
  2. Utilisez la ligne suivante dans votre code.

    var connObj = Dts.Connections["ADO.NETConnectionName"].AcquireConnection(null); 
    
    var sqlConn = (SqlConnection)connObj; 
    
  3. Une fois que vous avez terminé votre connexion SQL. Utilisez le code suivant pour fermer/libérer votre connexion.

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

Hope this helps.

+0

Merci pour la réponse, mais mon principal problème est que je ne vois pas l'objet « dts » dans la classe. Même si j'inclus les .dts dans les références. –

+0

La réponse n'est pas pertinente pour le composant de script, pour lequel la question est posée. Il s'agit plutôt d'une tâche de script légèrement différente. –

+0

Pour développer le commentaire de @ MaximV.Pavlov - la question concernait un script _component_ (qui existe dans une tâche Dataflow), alors que cette réponse concerne un script _task_ (qui existe dans le flux de contrôle). – Sepster

Questions connexes