2009-01-30 16 views
0

Je dois écrire une application ASP.NET qui se connecte à notre ancienne base de données IBM Universe et nous utilisons un produit appelé mv.net qui nous permet de connecter, lire, écrire, sélectionner, exécuter des programmes côté serveur, etcQuel est le moyen le plus sec d'obtenir des données de ma base de données?

Je veux aussi peu de répétitions de code que possible, mais je veux aussi aussi peu de transfert de données que possible.

Pour ouvrir une connexion, nous devons d'abord obtenir une référence au compte en utilisant un code tel que:

mvAccount myAccount = new mvAccount(serverName, login); 

Ensuite, on peut lire un article:

mvFile myInvoiceFile = myAccount.FileOpen("INVOICE"); 
mvItem myInvoiceRecord = myInvoiceFile.Read(invoiceID); 

Ensuite, nous nous sommes fait:

myAccount.Logout(); 

J'ai une classe pour chaque module, donc je peux avoir fACTURE, PURCHASE_ORDER, RMA, REQ, EXPEDITION, etc. sur. Dans INVOICE, j'ai besoin d'accéder à plusieurs tables telles que CLIENT, FACTURE, TERMES, SHIPVIA, etc.

Ce que je projetais de faire était de créer une classe appelée TechDB qui est le nom de notre base de données et y mettre le code donc dans ma classe FACTURE je peux dire:

TechDB connection = new TechDB(); 
mvItem myInvoiceRecord = connection.Read("INVOICE", invoiceID) 

Quand je fais ma classe TechDB ouvrirait la connexion, lisez le dossier, puis vous déloguer en une seule étape.

Je pense que je suis sur la bonne voie mais s'il vous plaît faites le moi savoir si non. Voici mes problèmes avec ceci:

  1. Comment renvoyer des erreurs ma classe INVOICE? Par exemple, des erreurs peuvent se produire si nous sommes incapables de se connecter à la base de données, impossible d'ouvrir le fichier, impossible de lire l'enregistrement. Que dois-je faire si j'ai besoin de récupérer des données de ma FACTURE, puis de lire la table TERMS? Je détesterais avoir à ouvrir une nouvelle connexion à la base de données quand je viens d'en ouvrir une.

  2. Devrais-je appeler la méthode Dispose sur toutes les classes qui ont ceci? Par exemple, le mvAccount a une méthode Dispose. Aucune de la documentation ne dit de l'appeler, mais devrais-je après la déconnexion()? Puis-je créer une méthode Dispose sur la classe TechDB qui exécute myAccount.Logout()? De cette façon, la connexion resterait ouverte et je pourrais la fermer à partir de ma classe INVOICE quand j'en aurais fini avec ça?

Donnez-moi quelques opinions sur la meilleure façon de gérer cela? Mon but est une application robuste, facile à modifier et aussi peu répétitive que possible.

Répondre

1

Je voudrais utiliser des fermetures, je pense que pour C# vous avez des délégués. Donc, quelque chose comme:

 
MyAccount.loginAndDo(servername, login, delegate(account){ 
    invoice = account.read("INVOICE"); 
    . 
    . 
    . 
}); 

Dans loginAndDo, vous devez vous connecter, appeler le délégué, puis fermez le compte.

0
  1. classes d'exception personnalisée
  2. Une idée serait de construire des requêtes de traitement par lots, (une liste des délégués).

selon 3/4. Dans mon cas, tous mes objets d'accès aux données héritent d'une classe qui contient une référence statique à une connexion. J'hésite à implémenter la logique de déconnexion dans Dispose en raison de la possibilité d'une panne de courant ou d'une défaillance du système ou de quelque chose et cette connexion n'est pas libérée.