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

ADO.NET Discussion :

[VB.Net] Enregistrement dans bdd ne fonctionne pas


Sujet :

ADO.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut [VB.Net] Enregistrement dans bdd ne fonctionne pas
    Bonjour à tous toujours dans mes problèmes avec l'utilisation d'une base de données j'essaye tant bien que mal à insérer de nouvelles lignes dans ma BDD mais il n'y a rien à faire voici le code que j'exécute:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
            strConn = "Data Source=bdd.sdf;Password=password"
     
            'Initialisation de la chaîne contenant l'instruction SQL
     
            strSql = "INSERT INTO MATABLE (Names, Money) Values('" & rsacTb.Text & "','" & moneyCombo.SelectedItem & "')"
     
            'Instanciation d'un Objet Connexion
     
            ObjetConnection = New SqlCeConnection
     
            'Donner à la propriété ConnectionString les paramètres de connexion
     
            ObjetConnection.ConnectionString = strConn
     
            'Ouvrir la connexion
     
            ObjetConnection.Open()
     
            'Instancier un objet Commande
     
            ObjetCommand = New SqlCeCommand(strSql)
     
            'Instancier un objet Adapter
     
            ObjetDataAdapter = New SqlCeDataAdapter(ObjetCommand)
     
            'initialiser l'objet Command
     
            ObjetCommand.Connection() = ObjetConnection
     
            'initialiser l'objet OleCBComandBuilder (sinon pas d'update)
     
            ObjetCB = New SqlCeCommandBuilder(ObjetDataAdapter)
     
            'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
     
            ObjetDataAdapter.Fill(ObjetDataSet, "MATABLE")
     
            'Créer une datatable à partir du dataset
     
            ObjetDataTable = ObjetDataSet.Tables("MATABLE")
     
            'Mettre dans le DataGrid une table  DataTable
            dataGrid.DataSource = ObjetDataTable
    L'enregistrement s'affiche bien dans le datagrid mais lorsque je clique droit sur ma table et choisi "afficher les données de la table" il n'y a pas de modification.

    J'ai d'abord pensé que ma requette est fausse alors j'ai essayer comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSql = "INSERT INTO RSAC (Names, Money) Values('FR','EUR')"
    Mais le résultat est identique
    Merci

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Ton code est difficilement lisible et il y a beaucoup de confusions.
    Pour répondre "rapidement", dans tes lignes, il n'y a aucun insert ou d'update d’exécuter.

    Tu mélanges dans les mêmes lignes, un INSERT et un SELECT. En mélangeant les objets.

    De plus il faut choisir entre faire une requête INSERT directement en base, et utiliser une datatable lié a une base de données et faire un update via un dataadapter.

    Que souhaites tu donc faire ? Dans l'ordre logique des choses?

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut
    Dans l'ordre logique des choses je dirais faire un insert directement en base

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Utilise les requêtes paramétrées.
    Tu gagneras en sécurité, en lisibilité et en rapidité.
    Jette un coup d'oeil au tutoriel dont je t'ai mis le lien, une fois habitué tu n'y verras plus que des avantages.

    Pour ce qui est du problème de fond, as-tu une erreur ? Si oui, laquelle ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut
    Je n'ai aucune erreur qui remonte (pas d'exception levé) mais simplement l'insert into n'ajoute pas de nouvelle ligne dans ma table. Je regarde la page que tu m'a mis en liens !

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Comme le dit Mactwist69, tu utilises des objets utiles pour une sélection alors que tu veux faire une insertion.
    Pour moi, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetCommand.ExecuteNonQuery()
    après ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetCommand = New SqlCeCommand(strSql)
    doit faire l'affaire.

  7. #7
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Tu devrais relire un peu de doc sur ADO, Developpez a de très bon tuto:

    http://dotnet.developpez.com/articles/ado1/vbnet/


    Tu y trouveras ce genre de chose:

    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
    'Exemple d'utilisation d'un objet Command
    Imports System
    Imports System.Data.SqlClient
    Imports System.IO
     
     
    Namespace ExempleAdoNetVBNET 
        Public Class CommandeSQL 
            Public Shared Sub Main() 
                Dim strConnexion As String = "Data Source=localhost; Integrated Security=SSPI;" + "Initial Catalog=Northwind"
                Dim strRequete As String = "INSERT INTO Region VALUES (5,'Sud')"
                Try 
                    Dim oConnection As New SqlConnection(strConnexion)
                    Dim oCommand As New SqlCommand(strRequete, oConnection)
                    oConnection.Open()
                    oCommand.ExecuteNonQuery()
                    oConnection.Close()
     
                Catch e As Exception 
                    Console.WriteLine(("L'erreur suivante a été rencontrée :" + e.Message)) 
                End Try 
            End Sub 'Main         
        End Class 'CommandeSQL     
    End Namespace 'ExempleAdoNetVBNET

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut
    Donc après plusieurs essai de requêtes paramétrés l'obtient toujours le même résultat voici ce que j'utilise :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
            Dim myCommand As SqlCeCommand
            Dim maRequete As String
     
            strConn = "Data Source=bddtest.sdf;Password=password"
     
            ObjetConnection = New SqlCeConnection
     
            'Donner à la propriété ConnectionString les paramètres de connexion
     
            ObjetConnection.ConnectionString = strConn
            '  '
            'Récupération de la chaine de connexion au serveur de base de données
     
            '
            'Requete mise a jour de la table client
            maRequete = "INSERT INTO [RSAC] ( [Names],[Money]) VALUES (@Names, @Money)"
     
            'Création de la commande SQL
            myCommand = New SqlCeCommand(maRequete, ObjetConnection)
     
            'Création et décalartion des paramètres
            With myCommand.Parameters
                .Add(New SqlCeParameter("@Names", SqlDbType.NVarChar, 100))
                .Add(New SqlCeParameter("@Money", SqlDbType.NVarChar, 100))
            End With
     
            'Attribution des valeurs aux paramètres
            With myCommand
                .Parameters("@Names").Value = rsacTb.Text
                .Parameters("@Money").Value = moneyCombo.SelectedItem
            End With
     
     
            Try
     
                'Execution de la requête
                myCommand.Connection.Open()
                myCommand.ExecuteNonQuery()
                myCommand.Connection.Close()
     
            Catch ex As SqlException
     
                Response.Write(ex.Message)
     
            End Try
    Les données vont bien affiché dans mon datagrid mais ne sont pas inséré dans la base
    j'ai essayé aussi de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ObjetCommand.ExecuteNonQuery()
    apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ObjetCommand = New SqlCeCommand(strSql)
    Dans mon ancien code
    Mais je me retrouve avec une exception
    ExecuteNonQuery : la propriété Connection n'a pas été initialisée.
    Donc je sais pas trop comment faire dois je utilisé les requêtes paramétrée ou me servir d'un dataSet pour modifier ma base et puis comment surtout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/03/2012, 11h34
  2. Réponses: 3
    Dernier message: 19/09/2007, 13h09
  3. Réponses: 2
    Dernier message: 09/04/2006, 16h05
  4. Réponses: 23
    Dernier message: 07/02/2006, 08h43
  5. [VB.NET] Enregistrer une BDD sous un autre format
    Par botanique dans le forum Windows Forms
    Réponses: 9
    Dernier message: 16/01/2006, 14h42

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