web-dev-qa-db-fra.com

Affecter dynamiquement le nom de fichier à la chaîne de connexion Excel

C’est la toute première fois que je joue avec SSIS dans SQL Server 2012. Je peux lire avec succès un fichier Excel et charger son contenu dans une table dans SQL Server 2012. Il s’agit d’un simple fichier Excel à lecture directe, puis copie sur serveur SQL sans validation. ou transformation pour l'instant. La tâche était réussie. Mais lorsque j'ai essayé de forcer le package à lire le nom de fichier d'une variable au lieu de la variable d'origine codée en dur, il générait une erreur "DTS_E_OLEDBERROR. Une erreur de base de données OLE s'est produite. Code d'erreur: 0x80040E4D"

enter image description here

Ce que j'ai fait vient de remplacer la chaîne de connexion codée en dur dans le gestionnaire de connexions Excel par une expression prenant la valeur d'une variable affectée par une expression

enter image description here

La valeur a été attribuée à la variable avant le démarrage de la tâche de flux de données. La variable a été vérifiée et a eu la valeur correcte.

enter image description here

Mais l'erreur ci-dessous a été générée au démarrage de la tâche de flux de données.

enter image description here

Il serait très apprécié que quelqu'un puisse signaler ce que j'ai mal fait et me dire comment résoudre le problème.

20
user1205746

Option A

La propriété ConnectionString pour un gestionnaire de connexions Excel n'est pas l'endroit où je vais manipuler le fichier actuel, ce qui contraste avec un gestionnaire de connexions de fichiers plat ordinaire.

Au lieu de cela, mettez une expression sur la propriété ExcelFilePath du gestionnaire de connexions Excel.

enter image description here

En théorie, il ne devrait y avoir aucune différence entre ConnectionString et ExcelFilePath, sauf que vous aurez plus de "choses" à construire pour obtenir la chaîne de connexion juste.

Assurez-vous également que vous exécutez le package en mode 32 bits.

Option B

Une alternative que vous pourriez rencontrer est que la valeur de conception de la chaîne de connexion n'est pas valide une fois qu'elle est en cours d'exécution. Lorsque le paquet commence, il vérifie que toutes les ressources attendues sont disponibles et si elles ne le sont pas, il échoue rapidement plutôt que de mourir à mi-charge. Vous pouvez différer cette validation jusqu'au moment où SSIS doit réellement accéder à la ressource. Pour ce faire, définissez la propriété DelayValidation sur True. Cette propriété existe dans tout SSIS, mais je commencerais par la définir dans Excel Connection Manager en premier. Si cela génère toujours l'erreur de validation du package, essayez de définir également la validation du délai du flux de données sur true.

27
billinkc

J’ai passé énormément de temps à essayer de faire fonctionner cela, même après avoir suivi toutes les instructions. Je l’ai donc gardé avec un nom Excel statique et ajouté une «tâche système de fichiers» pour copier le fichier et créer un nouveau fichier nom dont j'ai besoin. 

1
Torres