2009-11-20 4 views
1

Je travaille sur un programme de gestion des listes de prix pour mon entreprise en C# (Prototype est sous Win Forms mais je pense utiliser WPF pour l'ap final comme un exercice d'apprentissage MVVM). Notre système EMS est basé sur un back-end COBOL et le restera pendant au moins 3 ans, donc je ne peux pas accéder directement à ses données directement. Je veux tirer périodiquement des données de leur système EMS pour m'assurer que les prix restent synchronisés (et pour fournir d'autres informations aux utilisateurs d'une manière non-éditable telle que des emplacements de casiers). Ce que je cherche à faire est ...Meilleure façon d'incorporer des données existantes

Utilisez WinBatch pour exécuter automatiquement un rapport tous les soirs puis d'utiliser Monarch pour convertir le rapport de texte en un fichier plat (.xls?) Déposez le fichier dans un dossier et écrivez un petit ap pour le lire et l'ajouter à la base de données

Comment dois-je l'ajouter à la base de données? (SQL Express) Je pourrais avoir une table qui est complètement remplacée à chaque fois mais je suis un débutant au maximum de cela et je suis inquiet de ce qui se passerait si une table entière était remplacée pendant que la base de données était utilisée.

Mike

+0

J'ai trois réponses et je me penche vers codymanix, des pensées? –

Répondre

1

Si vous tronquer et remplissez une table entière, vous devriez le faire en une seule transaction et placez un verrou de table complet. C'est plus sécurisé et plus rapide. Vous pouvez également mettre à jour toutes les lignes modifiées, puis insérer de nouvelles (lignes manquantes), puis supprimer toutes les lignes qui n'ont pas été mises à jour dans cette exécution (insérez un numéro de version dans chaque ligne pour le déterminer).

0

d'abord créer un fichier txt à partir de l'application héritée. Ensuite, utilisez un insert de lot pour le tirer dans une table de travail pour le nettoyage que vous devez faire. Faites le nettoyage en utilisant t-sql. Exécutez ensuite t-sql pour insérer de nouvelles données dans les tables appropriées et/ou pour mettre à jour les lignes dans lesquelles les données ont été modifiées. S'il existe plusieurs enregistrements, effectuez l'insertion et la mise à jour par lots. Planifiez tout cela comme un travail à exécuter pendant les heures où la base de données n'est pas occupée.

Vous pouvez bien sûr faire tout cela le mieux possible dans SSIS, mais je ne sais pas si cela est disponible avec Express.

0

Y a-t-il des champs/tables disponibles pour vous dire quand le prix a été mis à jour pour la dernière fois? Si c'est le cas, vous pouvez simplement extraire les lignes récemment mises à jour et les mettre à jour dans votre base de données ... en supposant que vous ayez une clé primaire unique facilement disponible dans le magasin de données de votre application cobol.

Cela ne serait pas à jour, car vous l'exécutez en tant que script nocturne pour mettre à jour la base de données utilisée par la nouvelle application. Vous pouvez peut-être créer un script .net pour interroger le magasin de données cobol spécifiquement pour le prix que l'utilisateur recherche, et si l'heure de mise à jour des banques de données cobol est plus récente que celle que vous avez enregistrée, mettez à jour les enregistrements SQL Server.

(je ne suis pas familier avec cobol du tout, juste jeter des idées là-bas)

Questions connexes