IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Conventions d'écriture dans un programme en VB avec une base de données


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Par défaut Conventions d'écriture dans un programme en VB avec une base de données
    Bonjour à tous et toutes,

    Je m'interroge sur deux points de programmation dans mon projet que j'essaye de developer dans Visual studio en VB.

    Premièrement :
    Lorsque que je passe une commande sql dans mon code pour ajouter des donnes via des TextBox du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Table (colonne1, colonne2) VALUES ('"+Textbox1.Text+"','"+Textbox2.Text+"');
    Vaux-t-il mieux écrire '"+Textbox1.Text+"' ou '"&Textbox1.Text&"' ?

    Deuxièmement :
    Au chargement de mon form principal j'initialise ma connexion pour alimenter deux Listviews. Vaut-il mieux faire une procédure pour ouvrir la connexion ou retaper le code au besoin? Et du coups vaut-il mieux laisser la connexion ouverte pendant toute la durée de l'utilisation du programme ou la fermée des que possible ?

    Actuellement, j'ouvre ma connexion au chargement puis la ferme. Sur mon bouton d'ajout de données je l'ouvre à nouveau passe ma commande sql puis la referme ect...

    Y a-t-il des conventions, ou bien juste des conseils pour optimiser mon code?

    Merci par avance pour vos précieux éclaircissements.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 203
    Par défaut
    en vb l'opérateur de concaténation est &, mais ils sont pas embêtants le + fonctionne aussi, donc tu choisis ...

    après pour les dates et les string il est fortement conseillé d'utiliser les dbparameters

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lecmd.commandtext = "insert into table (col1, col2) values (1,@texte)"
    lecmd.parameters.Add("@texte",varchar).value = me.textbox1.Text
    pour les string ca évite l'injection sql (faille de sécurité) et les problèmes avec un apostrophe dans le textbox (qui fermerait la chaine et le reste ne serait pas reconnu => bug)
    pour les dates ca évite une conversion en texte puis une reconversion en date côté base de données, qui pourrait en plus entrainer une inversion mois/jour

    concernant l'ouverture/fermeture de connexion il est conseillé de l'ouvrir quand on en a besoin et de la fermer dès qu'on a fini, donc d'en ouvrir souvent (parfois plusieurs en même temps avec du multithreading)

    le mieux reste de se faire une classe qui encapsule l'accès aux données pour au final n'écrire que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DB.Execute(unstring)
    ou données = DB.Read(unstring) ' soit une fonction qui te retourne les données dans une variable, ou éventuellement une fonction qui te retourne le DbDataReader pour faire la boucle dans le code
    avec des signatures dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function Execute(requete as string, paramarray parameters() as system.data.sqlclient.sqlparameter ' pour sql server
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Par défaut
    Merci beaucoup Pol63 pour ces réponses à la fois précises et argumentées. Je vais de ce pas appliquer tes conseils.

    Merci encore du temps que tu m'as consacré.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Pour des exemples de requêtes paramétrées, voir Tuto ou Faq.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Par défaut
    Bonjour rv26t,

    excellent ce lien sur les requêtes et j'avoue que cette notion de vulnérabilité par injection m'était complètement étrangère. C'est vraiment ce qui me passionne dans mon apprentissage c'est que, pour pratiquement à chaque ligne de code, cela appel une remise en question de mes certitudes et la nécessite d’acquérir une nouvelle notion. Merci encore pour vos réponses car cela va ouvrir sur l'approfondissement de la notion d'encapsulation, de classe et de requête paramétrée.

  6. #6
    Membre émérite
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Par défaut
    Bonjour,
    Pour aller un peu plus loin sur le fonctionnement d'ADO.Net et, un article MSDN qui explique ce qui se passe lorsque l'on ferme une connexion à SQL Server :
    Regroupement de connexions SQL Server (ADO.NET)

Discussions similaires

  1. [AJAX] boucle for dans item pour l'affichage d'une base de donné
    Par senda dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/03/2009, 13h42
  2. Réponses: 4
    Dernier message: 07/01/2009, 10h09
  3. Réponses: 5
    Dernier message: 01/10/2007, 13h05
  4. Comment on connecte un programme Java avec une base de données FireBird?
    Par Gomez dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 16/02/2007, 10h21
  5. Réponses: 4
    Dernier message: 19/10/2006, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo