Quelles sont les meilleures pratiques ou les bêtes de fosse que nous devons être conscientes lorsque vous utilisez Microsoft Oracle Fournisseur d'une application de service Web de service Web? P>
3 Réponses :
Certaines pratiques que nous utilisons la base de notre expérience de la production: p>
en utilisant (conn) {} code> blocs fonctionnent bien) li>
- Dans un service, vous devez utiliser des connexions pour les plus brefs délais -. Surtout si vous cherchez à créer une solution évolutive li>
- Envisagez d'utiliser timouts explicites sur les demandes appropriées à la durée typique d'une demande. La dernière chose que vous voulez est d'avoir un type de demande qui se bloque pour bloquer potentiellement votre système. Li>
- Dans la mesure du possible des variables liées à l'utilisation pour éviter Parsis dur à la base de données (cela peut être un cauchemar de performances si vous ne commencez pas avec cette pratique). En utilisant les variables de liaison vous protègent des attaques par injection SQL de base. Li>
- Assurez-vous que vous avez un soutien adéquat de diagnostic intégré dans votre système -. Envisager de créer un wrapper autour de l'Oracle ADO appelle afin que vous puissiez instrument, journal, et de localiser tous les li>
- Envisagez d'utiliser des procédures stockées ou des vues si possible de pousser la sémantique de la requête et la connaissance du modèle de données dans la base de données. Cela permet plus facile profileing et le réglage requête. Li>
- Vous pouvez également envisager d'utiliser une bonne ORM (EF, Hibernate, etc) pour encapsuler l'accès aux données - en particulier si vous effectuez les opérations de lecture et d'écriture li>.
- L'extension au-dessus - ne pas agrémenteront votre code avec des dizaines de fragments SQL écrits individuellement. Cela devient rapidement un cauchemar de maintenabilité. Li>
- Si vous êtes engagé à Oracle comme base de données, ne pas avoir peur d'utiliser des fonctionnalités spécifiques de Oracle. La bibliothèque ODP donne accès à la plupart des fonctionnalités -. Telles que les curseurs de table de retour, les opérations par lots, etc li>
- Oracle de chaînes vides ( "") et NULLs comme équivalent - ne pas .NET. Normaliser votre traitement de chaîne selon le cas pour Oracle. Li>
- Envisagez d'utiliser NVARCHAR2 au lieu de VARCHAR2 si vous stockerez chaîne .NET Unicode directement dans votre base de données. Dans le cas contraire, convertir toutes les chaînes unicode pour se conformer au sous-ensemble ASCII de base. Ne pas le faire peut causer toutes sortes de confusion et des problèmes de corruption de données mal. Li>
ul>
+1 C'est très utile. Je laisserai la question ouverte afin que d'autres puissent contribuer à cela aussi.
@Lbushkin - ne ferme pas une connexion assez? Pourquoi devrais-je disposer?
En général, si un type implémente Idisposable, c'est une bonne idée d'appeler () sur celui-ci lorsque vous avez terminé - c'est la chose conviviale à faire, de sorte que si le code sous-jacent effectue une optimisation (par exemple, une libération précoce des ressources) a la possibilité de le faire. Dans le cas spécifique des connexions de base de données, certaines bibliothèques optimisent en interne en réponse à la cession de connexion - ce qui est une bonne chose pour l'application et la base de données, car dans la plupart des cas, les connexions sont en réalisation en commun. La fermeture de la connexion n'est pas toujours suffisante pour indiquer au fournisseur sous-jacent que vous avez terminé.
Les fournisseurs Oracous fonctionnent bien dans une application ASP.NET, mais soyez au courant de: p>
Cela n'a rien à voir avec ASP.NET, mais il est important de noter que Oracle stocke Vide String et null à la fois comme NULL, donc si vous avez besoin de savoir que quelque chose était vide et non null, vous devez Ajoutez une colonne supplémentaire à suivre qui ... p>
Quelques astuces supplémentaires: P>
De plus, le fournisseur Microsoft Oracle (qui est livré avec la framework .NET) a des problèmes pour analyser de grandes valeurs aux propagines stockées. Grands articles (plus grand puis 32000 octets, je crois) causer des erreurs sur les types de désaccordement. Cela peut causer de gros problèmes lorsque vous travaillez avec des blobs et une longue (qui stocke de longs textes). Les requêtes paramétrées sont toutefois capables de recevoir de gros éléments (actuellement l'un de mes projets utilise un hack pour contourner ce problème).
La longueur maximale d'une chaîne dans une procédure stockée est de 32k caractères (ou d'octets). Tous les plus grands doivent être de type LOB (blob, clob ou nclob). Un lob peut être> 2 Go de taille.