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 :

liaison base de donnée avec objets (combobox, textbox, etc.) [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut liaison base de donnée avec objets (combobox, textbox, etc.)
    Bonjour a tou(te)s.

    Je réalise actuellement mon premier "vrai" projet en VB.net a l'aide de VS 2010 Basic (la version gratuite ^^).

    Mais je reste désespérément bloqué a une étape toute bête: l'enregistrement de mes données.

    J'ai créer une BDD à l'aide de SQL fourni avec VS 2010. et je "travaille" avec de WindowsForm.

    j'ai un créer un bouton "BT_enregister".
    a l'appui de celui-ci par l'utilisateur, je souhaite que mes champs (textbox, combobox, images, bref, plein d'objets!!!) soit enregistrer dans ma base de données.

    donc, ma demande si possible: est-ce que quelqu'un pourrait me donner un exemple de code détaillé pour ça?

    l'idéal étant même (j'en, demande BEAUCOUP, j'en suis conscient) un projet tout bête avec une textbox et 1 bouton enregistrer + 1 BDD, afin que je comprenne les mécanismes de BDD SQL (j'ai bien compris qu'il y avait 4 fonctions de base à SQL mais je ne vois pas comment les utiliser dans un projet).

    J'ai bien sur lu le cours de M Lasserre (tres bien fait au passage!!!), mais je n'ai pas tout saisi propos des enregistrements!!!

    J'ai évidemment écumé les forums et google, mais je n'ai rien trouvé de probant (peut-être n'ai-je pas chercher avec les bon mots!)

    en tous cas, merci d'avance a tous!!!

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    à mettre en haut du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imports system.data.sqlclient
    à mettre dans la sub qui enregistre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    try
     
    using conn as new sqlconnection
      conn.connectstring = "mettre la chaine de connexion ici"
      dim cmd as new sqlcommand 
      cmd.connection = conn
      cmd.commandtext = "insert into matable (lechamp) values (@lechampvaleur)"
      cmd.parameters.add("@lechampvaleur",me.textbox1.text)
     
      conn.open
      cmd.executenonquery
    end using
     
    catch ex as exception
      msgbox ("erreur : " & ex.message)
    end try

    http://www.developpez.net/forums/d11...e-variable-vb/
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Je me permet de commenter ce que tu m'a donné, afin d'être sur de comprendre! car il y a 2/3 trucs que j'ai pas pigé!!! mais ça va venir, j'en suis sur!!!



    Citation Envoyé par Pol63 Voir le message

    à mettre en haut du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imports system.data.sqlclient
    à mettre dans la sub qui enregistre :
    là, il faut que je déclare l'utilisation de la bibliothèque en l'important (ça, je "connais"!!!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    try
    using conn as new sqlconnection
      conn.connectstring = "mettre la chaine de connexion ici"
      dim cmd as new sqlcommand 
      cmd.connection = conn
      cmd.commandtext = "insert into matable (lechamp) values (@lechampvaleur)"
      cmd.parameters.add("@lechampvaleur",me.textbox1.text)
     
      conn.open
      cmd.executenonquery
    end using
     
    catch ex as exception
      msgbox ("erreur : " & ex.message)
    end try
    Déjà, une première question: pourquoi l'utilisation de la commande try?
    pour gérer les erreur, j'imagine, non?

    ensuite, la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using conn as new sqlconnection
    le "using" remplace le "function"?

    pour le reste, je comprends a peu près les surcharges (on dit comme ça, non?)
    ah oui aussi. pourquoi mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn.open
      cmd.executenonquery
    a la fin? je l'aurai mis au début.
    j'explique pourquoi je dis ça: tu ouvre la connexion avec cette ligne, non?
    donc c'est la ligne que j'aurais mis en premier.
    et à quoi sert ?


    sinon, le reste est assez clair!! merci.
    j'essais ça dans l'après midi ou soirée, suivant le temps que j'ai!!!!!

    merci beaucoup en tous cas pour ton aide!!!



    [EDIT]
    ARGGG j'ai des"erreurs" a propos des lignes
    VB me dit que connectstring n'est pas un membre de System.data.sqlclient.sqlconnection
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     cmd.Parameters.Add("@lechampvaleur", Me.TXT_Nom.Text)
    il me dit que l'argument add est obsolète et qu'il vaut mieux utiliser "AddWithValue". Qu'en penses-tu?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par bougyfab Voir le message
    là, il faut que je déclare l'utilisation de la bibliothèque en l'important (ça, je "connais"!!!)
    pas vraiment
    pour utiliser une bibliothèque, il faut l'ajouter en référence (clic droit sur le projet)
    certaines sont déjà mises par défaut dont system.data.dll
    imports sert juste à ne pas préfixer par les namespace
    au lieu de taler dim c as new system.data.sqlclient.sqlcommand on tape juste dim c as new sqlcommand, car avec l'imports il sait où chercher



    Citation Envoyé par bougyfab Voir le message
    Déjà, une première question: pourquoi l'utilisation de la commande try?
    pour gérer les erreur, j'imagine, non?
    oui le try catch permet en cas d'erreur de ne pas mettre un violent message d'erreur à l'utilisateur voire fermer l'appli
    en cas d'erreur dans le try, ca passe dans le catch, il est alors possible de gérer l'erreur selon son type ou autre et de voir ce qu'on fait alors (message si erreur temporaire, enregistrer dans un log si c'est un bug)
    le try catch est important dans un programme, il faut en mettre un peu partout, documente toi sur try/catch/finally et éventuellement sur throw


    Citation Envoyé par bougyfab Voir le message
    ensuite, la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using conn as new sqlconnection
    le "using" remplace le "function"?
    pas du tout
    sub est une méthode, function est une méthode qui retourne un résultat, je n'en ai pas mis dans mon exemple parce que ca me semblait évident, et à priori pour toi ca sera dans une sub lié à au clic sur un bouton (sub machin handles button.click)
    le using/end using sert pour les classes implémentant IDisposable (le cas pour sqlconnection)
    ca permet d'appeler .Dispose (libération de la mémoire non managée) dans tous les cas (sortie normale, ou erreur qui va dans le catch)
    sans using ca donnerait
    dim c as new connection
    (...)
    erreur
    (...)
    c.dispose
    catch
    la ligne qui passe en erreur fait qu'on ne va pas jusqu'à c.dispose et donc la mémoire ne sera pas libérée tout de suite (elle le sera quand même mais on ne sait pas quand)
    et pour une connection, .dispose appelle .close donc c'est bien pratique
    le using équivaut à un try/finally

    Citation Envoyé par bougyfab Voir le message
    pour le reste, je comprends a peu près les surcharges (on dit comme ça, non?)
    je ne vois pas de surcharge dans ce que j'ai écrit ...
    une surcharge est une définition secondaire (ou plus) d'un membre mais avec des paramètres différents en nombre ou type
    sub machin(a as string)
    sub machin(a as string, b as integer)


    Citation Envoyé par bougyfab Voir le message
    ah oui aussi. pourquoi mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn.open
      cmd.executenonquery
    a la fin? je l'aurai mis au début.
    j'explique pourquoi je dis ça: tu ouvre la connexion avec cette ligne, non?
    donc c'est la ligne que j'aurais mis en premier.
    là c'est au choix, en théorie une connexion doit être ouverte le moins de temps possible, dans la pratique on s'en fout parfois, surtout pour 1 picoseconde en inversant l'odre
    d'un autre côté en ouvrant la connexion au début, si ca plante, on ne perdra pas du temps à créer un Command ...

    Citation Envoyé par bougyfab Voir le message
    et à quoi sert ?
    ca c'est expliqué dans le lien que je t'ai mis, merci de le lire ...

    explications non exhaustives, il y a de vastes sujets de discussion qui pourrait nécessiter des pages de détails ^^
    mais msdn est là pour les détails ...


    EDIT aussi : pour le connectstring, regarde simplement ce que l'intellisense te propose ! (en l'occurrence connectionstring)
    EDIT 2 : c'est comme tu le sens ^^ ; obsolete veut dire toujours fonctionnel mais qu'il y a mieux depuis que la fonction de base a été écrite
    donc tu peux utiliser addwithvalue
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    OUILLLEEE

    ta réponse me "pique" les yeux et le cerveau!!!!!

    pour la référence de bibliothèque, je savais, je me suis mal exprimé!!!

    pour la sub dans le bouton enregistrer, j'avais aussi compris!!!
    c'etait plus le "using" qui m'interrogeais!

    pour les surcharge, je pensais qu'il s'agissait des "arguments" que l'on passait aux différentes commande avec le . (genre ).

    pour le lien, je ne l'avais pas vu

    pour le reste, je vais potasser le MSDN et les forums, mais au moins, j'avance un peu grace a toi.

    Je ne passe pas encore le statut en [résolu] car je pense que j'aurais d'autres questions!!!!

    Mais MERCI de prendre du temps pour tout m'expliquer, car comme je l'ai dit, je débute (et comme tu vois, je suis un GRAND débutant!) et lorsque l'on est bloqué, c'est limite a être dégoûter du dev'!!!(ça fait ~15 jours que je cherche une solution simple et a ma porté en fait!!)


    Sinon, l'intellisense, c'est "l'autocompletion" + l'aide des commandes de VS 2010, non? je ne savais pas que c'était son nom!!!

    Mais une chose est sure: c'est juste génial!!!!!

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Citation Envoyé par bougyfab Voir le message
    Sinon, l'intellisense, c'est "l'autocompletion" + l'aide des commandes de VS 2010, non? je ne savais pas que c'était son nom!!!

    Mais une chose est sure: c'est juste génial!!!!!

    Oui ça te permet de voir ce qui t'es proposé par le framework après un "monTruc." quand tu es un peu perdu, mais attention tout n'est pas forcément indiqué seulement ce qui est le plus courant en général. Tu peux l'appeler avec Ctrl + Space et faire Tab pour écrire la ligne sur laquelle tu es (ou carrément Enter pour écrire et passer à la ligne suivante)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par bougyfab Voir le message
    ta réponse me "pique" les yeux et le cerveau!!!!!
    c'est pour dégouter les non motivés
    non je déconne c'est pour ne serait que mentionner certaines choses importantes qui devront être vues pendant l'apprentissage


    Citation Envoyé par bougyfab Voir le message
    pour les surcharge, je pensais qu'il s'agissait des "arguments" que l'on passait aux différentes commande avec le . (genre ).
    dim b as untruc => b est une variable, un truc est son type
    dim b as new untruc => new sert à instancier, b est une instance de untruc
    b.machin = "test" => machin est une propriété
    b.refresh => refresh est une méthode
    membre de classe : champ, propriété, méthode ou function (un champ est une variable)
    portée des membres : private, protected, friend, protected friend, public ; shared

    Citation Envoyé par bougyfab Voir le message
    Je ne passe pas encore le statut en [résolu] car je pense que j'aurais d'autres questions!!!!
    j'imagine bien

    Citation Envoyé par bougyfab Voir le message
    et lorsque l'on est bloqué, c'est limite a être dégoûter du dev'!!!(ça fait ~15 jours que je cherche une solution simple et a ma porté en fait!!)
    http://plasserre.developpez.com/cours/vb-net/
    moi j'ai commencé par lire tout ca pendant 40 heures
    ca permet d'apprendre les termes et notions de base, et même si on ne retient pas tout (certaines choses sont survolables) on sait ce qui existe et on sait donc quoi chercher
    .net est très vaste, et bien souvent on écrit 10 lignes de code alors qu'une seule le fait déjà dans la framework ...


    Citation Envoyé par bougyfab Voir le message
    Sinon, l'intellisense, c'est "l'autocompletion" + l'aide des commandes de VS 2010, non? je ne savais pas que c'était son nom!!!
    l'intellisense est en effet le menu qui gère l'autocomplétion avec une petite bulle d'aide pour chaque membre
    quand on ne connait pas une classe, il est pratique d'écire dim a as laclasse et de faire a. pour lire tout ce qu'il y a
    on peut voir les surcharges avec haut et bas
    on peut voir les paramètres, leur type et leur utilité en ouvrant ( et en mettant des ',' s'il y a plusieurs paramètres
    sur les membres et les types tu peux faire F1 pour avoir des infos et parfois des exemples


    Citation Envoyé par bougyfab Voir le message
    Mais une chose est sure: c'est juste génial!!!!!
    en effet .net est très agréable à utiliser une fois qu'on connait un peu
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    merci a vous!
    je vous tiens au courant et me replonge, entre autre, dans le cours!

    Sinon, j'ai commencé à "apprendre" sur un autre site (lezero) et l'approche dans l'apprentissage est bien différente, d'où certaines interrogations de ma part!!!

    Puis je me suis penché sur le cours de VB.net du Dr Lasserre! et là, grosse claque!!!! mais le vours est très bien fait, et les exemples sont bien. Après, je suis passé très vite sur certaines choses.

    Donc, je retourne me noyer de le cours vb.net!!!

    Pour ça, j'avais compris que cela servait à instancier! De même, j'avais bien compris que cela était un "constructeur" pour reprendre les terme du cours!!
    Mais il est clair qu'il me faut acquérir les termes corrects! tu fais donc bien de me faire ce rappel! surtout au niveau des membre des classes (j'ai pas intégré ça du tout!).
    Pour la portée des membres, ça je connais un peu, car mon projet comporte plusieurs WindowForm et je récupère certaines variable que j'ai passé en Public. Mais je suis loin de maîtriser le tout!!!!!


    et NON, je ne me dégouterais pas ni ne me démotiverais!!!!! NA!!!

    en tou cas encore!!!

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Bon: je continue a faire mon pénible!!!!

    je ne sais pas comment renseigner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conn.ConnectionString =
    j'ai bien cherché, mais je n'ai pas compris avec ce que j'ai trouvé

    voici ce que j'ai touvé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
    Dim conn As New SqlClient.SqlConnection()
    Dim cmd As New SqlClient.SqlCommand()
    conn.ConnectionString = "Data Source=(local);Initial Catalog=myDatabase;Integrated Security=SSPI"
    conn.Open()
    cmd.Connection = conn
    With cmd.Parameters
    .Add(New SqlClient.SqlParameter("@Student_id", TextBox1.Text))
    .Add(New SqlClient.SqlParameter("@FirstName", TextBox1.Text))
    .Add(New SqlClient.SqlParameter("@LastName", TextBox2.Text))
    .Add(New SqlClient.SqlParameter("@Email", TextBox3.Text))
    .Add(New SqlClient.SqlParameter("@Module", TextBox1.Text))
    End With
     
    cmd.CommandText = "INSERT INTO <Students> (<field1>,<field2>,<field3>,<field4>,<field5>) VALUES (@Student_id, @FirstName, @LastName, @Email, @Module)"
    Progress.Show()
    End Sub
    Je ne comprends pas comment renseigner le ConnectionString (la chaine de connexion, comme tu me l'as indiqué). Il s'agit du chemin de la base de donnée? je ne peux pas mettre un truc du genre c:\Truc\Machin\database

    ça, c'est que j'utilise une base local, et pas un serveur, non? mais le reste?


    Sinon, j'ai bien compris le "with" qui évite de taper Cmd.truc a chaque ligne (Vu dans le cours, en fait )

    J'ai cru comprendre que pour chacune des lignes, une nouvelle donnée dans la table @truc est ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Add(New SqlClient.SqlParameter("@Student_id", TextBox1.Text))
    donc là:

    ajoute le texte de ma TextBox1 dans le champ Student_id

    Mais l'exemple ci dessus est il correct?

    A part le "try" (sans revenir dessus, j'ai bien compris l’intérêt de l'utilisation de try /catch)


    de même:

    pour ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.CommandText = "INSERT INTO <Students> (<field1>,<field2>,<field3>,<field4>,<field5>) VALUES (@Student_id, @FirstName, @LastName, @Email, @Module)"
    =

    En gros, la commande insert permet d’insérer (hmmm!) dans la table Students
    les colonnes
    <field1>,<field2>,<field3>,<field4>,<field5>
    avec les valeurs récupérés dans les textbox qui sont liés avec
    @Student_id, @FirstName, @LastName, @Email, @Module
    (je pense comprendre, mais n'arrive peut-être pas à l'expliquer!!!)


    Et pour ça:
    je suppose qu'il s'agit d'une barre de progression qui s'incrémente a mesure de l'enregistrement.

    pas évident quand même les databases + SQL !!!!!
    Enfin merci de m’éclairer (j'entrevois la sortie du tunnel, mais le chemin est encore long!!!)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pour la chaine de connexion, ca explique comment trouver le moteur de base de données (ou le fichier pour une base fichier), et divers paramètre à utiliser pour la connexion

    en faisant F1 sur la propriété connectionstring, ca va te lister tous les paramètres possibles, à quoi ils servent etc...
    très peu sont obligatoires
    sinon il y a le site http://www.connectionstrings.com/ sur lequel tu indiques ta base de données et qui t'explique ce qu'il faut mettre
    car le connectionstring dépend de la base
    pour sql server, il faut indiquer comment joindre le sgbdr (ip\nominstance par exemple)
    pour sql server ce (base fichier) il faut indiquer le chemin du fichier
    parfois il faut mettre un lgoin et un mot de passe etc...

    le with sert à ne pas taper le mot à chaque ligne, mais personnellement je suis pas fan, ca rend le truc plus illisible dans certains cas (dans le tiens c'est pas génant)

    le commandtext contient la requete, mais ne l'exécute pas
    il est ainsi possible de la modifier
    cmd.commandtext = cmd.commandtext & " WHERE condition"
    c'est cmd.executeX qui exécute la requete (X à remplacer par nonquery, scalar ou reader, voir mon lien au début du topic) en fonction du commandtext et des parameters, sur la connection associée
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Bon... Après quelques essais: je vais peut-être passer sur une base de donné acces (fichier!). Parce que je me suis mal débrouillé quand j'ai créer ma BDD avec VS 2010!!!

    Je vous tiens au courant!

    Edit:
    RHHAAAA inside
    je l'avais ma chaine de connexion... mais j'ai tout viré......
    bon je recommence mais avec une BDD simple (une table avec une colonne "date") pour tester!

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Bon.....
    après réflexion, je me suis fait un petit prog de test afin de voir ce qui n'allait pas....

    1 form avec:
    1textbox nom,
    1 datepicker (pas configuré dans le code pour la base de données)
    1 bouton enregistrer

    1 fichier SQLdatabase créer avec VS2010 nommée TestDB.mdf contenant
    1 table TableTest
    1 champ n° (ma clé primaire)
    1 champ Nom
    1 champ Date

    Donc, très simple.

    je récupère le connection string automatiquement lorsque je crée ma base de données (un copier / coller de la chaine de liaison).


    après moults essais, ma database reste toujours vide. Aussi, je soupconne formtement le fait que je n'ai pas nommée les champ @champ (je ne sais pas comment faire). Lorsque j’exécute le prog' dans l'état, je n'ai pas (plus) de message d'erreur, pourtant, il ne se passe rien...

    je poste donc ici mon projet + mon code, afin que vous puissiez, si le temps vous le permets, d'y jeter un oeil et de me dire ce qui ne va pas.

    http://bougy.free.fr/TestBD/Test%20B...nn%c3%a9es.zip

    voici également le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Imports System.Data.SqlClient
    Public Class Form1
        'Methode permettant l'enregistrement grace à l'action Click sur l'objet bouton "BT_enregistrer
        Private Sub BT_enregistrer_Click(sender As System.Object, e As System.EventArgs) Handles BT_enregistrer.Click
            Try 'essaye (methode pour gerer les erreur)
                Using conn As New SqlConnection 'Déclare la variable "conn" comme SQLConnection
     
                    'relie "conn" a la chaine de connexion(voir suivant base de données: il s'agit de la "localisation" de celle-ci (pour pouvoir travailler dans la base de données)
                    conn.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\TestDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
                    Dim cmd As New SqlCommand 'Déclare la variable "cmd" comme SQLCommand
                    cmd.Connection = conn 'Commande via "cmd" l'ouverture de la connexion
                    cmd.CommandText = "insert into TableTest (Nom) values (@field1)" 'Insère les commandes SQL
                    cmd.Parameters.AddWithValue("@field1", Me.TXT_Nom.Text) 'recupère le texte contenu dans la textbox " Me.TXT_Nom" et la rajoute dans le champ
     
                    conn.Open() 'ouvre la base de données
                    cmd.ExecuteNonQuery() 'travail dans la base de données
                End Using
     
            Catch ex As Exception 'Déclare ex comme une variable Catch exeption si une erreur s'est produite (pour récuperer les erreurs)
                MsgBox("Erreur : " & ex.Message) 'affiche dans une message box le texte "erreur" suivi du message d'erreur capter par Catch
            End Try 'fin de l'instruction try
        End Sub
        'Controle des champs:
        'Vérification que la Textbox n'est pas vide
        Private Sub TXT_Nom_TextChanged(sender As System.Object, e As System.EventArgs) Handles TXT_Nom.TextChanged
            If TXT_Nom.Text = "" Then
                MsgBox("Veuillez saisir votre nom", MsgBoxStyle.Exclamation)
                BT_enregistrer.Enabled = False
            ElseIf TXT_Nom.Text <> "" Then
                BT_enregistrer.Enabled = True
            End If
     
        End Sub
     
    End Class
    Il ne faut pas hésiter a me reprendre (de volée) si il y a des erreurs dans mon code^^



    Merci d'avance

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    surement le problème courant de la base de données qui est recréée à chaque exécution ...
    attacher une base de données dans la chaine de connexion n'est pas standard

    le nom des variables @ est libre
    et après c'est simple soit la requete fait ce qu'elle doit faire, soit il y a une exception de throwée (et ici ton code est bon)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Concernant la chaine de connexion:

    Comme je l'ai dit, je prends betement ce que VS2010 me donne(voir l'image en PJ):

    Est-ce une erreur de ma part?

    Comment résoudre le problème de la base recrée a chaque nouvelles connexion?
    (là, je t'avoue, je n'ai pas sollicité Google ou Bing..)
    Images attachées Images attachées  

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ne pas utiliser les assistants base de données ^^
    un assistant n'aide pas à apprendre, en général on le laisse faire sans forcément comprendre ou chercher à comprendre ce qu'il fait, alors qu'il ne fait que taper du code, donc autant le taper soi même, on maitrise tout

    ou éventuellement retirer le paramètre attach de la connectionstring
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Merci a toi de passer autant de temps a me lire et a me répondre!!!

    Alors: après plusieurs essais, je laisse définitivement tomber l'assistant pour ma chaîne de connexion.
    -D'une part, ça ne fonctionne pas
    -D'autre part, comme tu le dit, ça ne m'avance a rien si je ne comprends pas comment fonctionne les paramètres (enfin d'après le site http://www.connectionstrings.com , ça n'a pas l'air trop compliqué, contrairement a ce que sortait l'assistant!!)

    J'ai essayé autre chose:

    -Création d'un fichier avec Access 2010 (version d'essai)
    -Récupération de la méthode a suivre sur le site que tu m'as donné
    http://www.connectionstrings.com/access-2007 (il n'y a pas de version pour 2010, mais 2007 et 2010 sont assez semblable, notamment au niveau de l'extension "exotique" *.accdb)
    -ajout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Data.OleDb.OleDbConnection
    -ajout aussi d'un "wait cursor" pour voir rapidement si l'enregistrement "tourne" ou pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Try 'essaye (methode pour gerer les erreur)
                Cursor = Cursors.WaitCursor
                Using conn As New SqlConnection 'Déclare la variable "conn" comme SQLConnection
     
                    'relie "conn" a la chaine de connexion(voir suivant base de données: il s'agit de la "localisation" de celle-ci (pour pouvoir travailler dans la base de données)
                    conn.ConnectionString = "Provider =Microsoft.ACE.OLEDB.12.0; Data Source =C:\TestDB\Test.accdb; Persist Security Info =False;"
                    Dim cmd As New SqlCommand 'Déclare la variable "cmd" comme SQLCommand
                    cmd.Connection = conn 'Commande via "cmd" l'ouverture de la connexion
                    cmd.CommandText = "insert into TestDB (Nom) values (@field1)" 'Insère les commandes SQL
                    cmd.Parameters.AddWithValue("@field1", Me.TXT_Nom.Text) 'recupère le texte contenu dans la textbox " Me.TXT_Nom" et la rajoute dans le champ
     
                    conn.Open() 'ouvre la base de données
                    cmd.ExecuteNonQuery() 'travail dans la base de données
     
                End Using
     
            Catch ex As Exception 'Déclare ex comme une variable Catch exeption si une erreur s'est produite (pour récuperer les erreurs)
                MsgBox("Erreur : " & ex.Message) 'affiche dans une message box le texte "erreur" suivi du message d'erreur capter par Catch
            End Try 'fin de l'instruction try

    et là, premier echec:
    le mot clé "Provider" n'est pas pris en charge.

    QU'a cela ne tienne: je vire le parametre en question. et là nouveau message d'erreur qui me dit qu'il ne trouve pas le serveur (voir image jointe).

    Ce message me met la puce à l'oreille: je cherche a me connecter avec un serveur / client, alors que ma base est locale.
    Le problème n'est pas là?
    Je pense bien qu'il y a toujours une relation client / serveur dans un SGBD, mais n'est pas legerement différent dans une base "locale". Une subtilitée qui m'aurait echapées
    Pourtant, on peut tout a fait utiliser des requêtes SQL dans une base access (même locale!), non?

    Voilà donc où j'en suis..... Pas bien avancé (enfin si: PLUS JAMAIS d'assistant!!!), même si j'ai pu voir en détails les parametres de connectionstring grace au site dont tu as fais mention.

    Si jamais j'arrive un jour a enregistrer ce *** texte dans ma bdd (ce dont je ne doute pas!!!) je pense que je proposerait un tuto clair et détaillé!!!!!!

    Car le fait est que je n'ai trouvé aucun tuto détaillé pour faire ça!!! (en fait, je suis peut-être le seul a ramer autant!!!)

    en tous cas, merci encore de ton aide.
    Images attachées Images attachées  

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par bougyfab Voir le message
    Ce message me met la puce à l'oreille: je cherche a me connecter avec un serveur / client, alors que ma base est locale.
    Le problème n'est pas là?
    Je pense bien qu'il y a toujours une relation client / serveur dans un SGBD, mais n'est pas legerement différent dans une base "locale". Une subtilitée qui m'aurait echapées
    Pourtant, on peut tout a fait utiliser des requêtes SQL dans une base access (même locale!), non?
    une base de données fichier n'a rien à voir avec un sgbdr réel
    il n'y a pas de client server dans un fichier, ca lit et écrit le fichier, s'il y a plusieurs clients sur la même base (pas toujours supporté sur une base fichier, mais access y arrive) chacun lit et écrit dedans
    avec un vrai sgbdr, il y a un processus (.exe) qui écoute ce qu'on lui demande, est le seul à lire et écrire, et retourne des données

    ton problème ici vient du fait qu'il y a plusieurs provider en .net, et il faut utiliser celui qui va avec la base de données
    pour sql server ca se passe dans system.data.sqlclient, pour access ca se passe dans system.data.OleDb
    utiliser un sqlconnection pour access est impossible, il faut un OleDbConnection (et pour les autres classes aussi)
    le mot clé provider sera d'ailleurs reconnu sur un OleDbConnection, alors que ce paramètre n'existe pas pour sql server

    concernant l'utilisation d'access ou d'sql server, ca dépend de ce que tu veux faire
    s'il doit y avoir plusieurs exe connectés à la base sur un réseau, access n'est pas conseillé
    pour sql server, il faut avoir sql server express ou standard (ou autre)
    il y a sql server management studio qui est en général fournit avec, qui permet comme access d'avoir une ui pour gérer la structure
    ensuite la chaine de connexion n'est pas spécialement compliquée
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Merci pour ta réponse.*
    Je me doutai bien s'il y avait "anguille sous Roche".*
    *
    Mes données seront stockées dans un fichier access.(car je ne pourrais pas bénéficier d'un serveur "officiel" pour y installer un serveur sql. Ni même d'une instance sur un poste client en fait).*

    Donc, je repart de zéro!! Avec quelques notions de connexion sql en plus quand meme!!!

    Cela dit, un bon point pour moi: j'avais déjà pensé a*

    Imports System.Data.OleDb.OleDbConnection

    Reste maintenant a apprehender la manière de mettre le contenu de mes différents objets dans ma base access.*

    Est-ce*radicalement différent dans la manière de faire?

    Excuse ma réponse courte, mais je suis dans le train et j'écris depuis mon smartphone!!**

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    access ou sql server (ou autre), les objets sont les même, seul le préfixe change
    sql=>oledb (connection, command etc...)
    éventuellement quelques différences sur le langage sql vu qu'access ne suit pas totalement la norme
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  20. #20
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Tu me rassures!!
    Je pensais se comme la classe était différente, les objets et leurs paramètres étaient différents.
    Je teste ça des demain.

    Merci beaucoup!!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Base de donnée avec combobox
    Par tony-28 dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/11/2012, 09h28
  2. tutos base de donnée orientée objet avec Sql server
    Par marwa21 dans le forum MS SQL Server
    Réponses: 17
    Dernier message: 15/03/2011, 14h59
  3. Base de données relationnelle-objet avec MySQL
    Par tiger8 dans le forum Administration
    Réponses: 2
    Dernier message: 25/10/2010, 15h26
  4. connexion à une base de données avec l'objet dataview
    Par mademoizel dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 12/03/2007, 13h31
  5. [SGBDOO] Base de données orientée objet
    Par Jaona dans le forum Décisions SGBD
    Réponses: 19
    Dernier message: 14/04/2003, 11h07

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