Question Attribuer dynamiquement le nom du fichier à Excel chaîne de connexion


C'est la toute première fois que je joue avec SSIS dans SQL Server 2012. Je peux lire un fichier Excel avec succès et charger son contenu dans une table SQL Server 2012. La tâche est un simple fichier Excel de lecture directe, puis une copie vers un serveur SQL sans validation ou transformation pour le moment. La tâche a été réussie. Mais lorsque j'ai essayé de faire en sorte que le package lise le nom du fichier à partir d'une variable au lieu du nom d'origine codé, il générait une erreur "DTS_E_OLEDBERROR. Une erreur OLE DB s'est produite. Code d'erreur: 0x80040E4D"

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

Je serais très reconnaissant si quelqu'un pouvait indiquer ce que je faisais incorrectement et me conseiller sur la manière de résoudre le problème.


18
2018-02-03 20:09


origine


Réponses:


Option A

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

Au lieu de cela, placez une expression sur le gestionnaire de connexion Excel ExcelFilePath propriété.

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" à créer 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 pour la chaîne de connexion n'est pas valide une fois qu'elle est en cours d'exécution. Lorsque le paquetage commence, il vérifie que toutes les ressources attendues sont disponibles et, si ce n'est pas le cas, il échoue rapidement plutôt que de mourir à mi-charge. Vous pouvez retarder cette validation jusqu’à ce que SSIS ait réellement accès à la ressource et vous le faites en définissant le DelayValidation propriété à True. Cette propriété existe sur tout dans SSIS mais je commencerais par la définir d'abord sur Excel Connection Manager. Si cela génère toujours l'erreur de validation du package, essayez également de définir la validation du délai du flux de données sur true.


24
2018-02-03 20:19



J'ai eu beaucoup de mal à essayer de faire fonctionner ceci, même après avoir suivi toutes les instructions, donc je l'ai juste gardé avec un nom Excel statique et ajouté une "tâche de système de fichiers" pour copier le fichier et créer un nouveau fichier nom dont j'ai besoin


0
2017-07-10 23:28