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

Accès aux données Discussion :

ADO.NET INSERT DELETE UPDATE refresh des composants graphic


Sujet :

Accès aux données

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut ADO.NET INSERT DELETE UPDATE refresh des composants graphic
    Bonjour tout le monde.

    Je suis nouveau sur developpez.com donc pardonnez moi si je n'utilise pas le forum correctement.

    J'ai une question concernant ADO.NET qui est assez basic mais cependant très importante.

    Je suis en train de développez une application windows tout ce qu'il y à de plus normal. Je dois pour ce projet utiliser une librairie spécial qui à été concu depuis les dataBase factory (paterns de microsoft) et qui à été quelque peu modifiée.

    Je travail en écrivant mes requêtes donc sans automatiser quoi que ce soit.
    J'ai un dataAdapter à qui je passe ma requête "INSERT INTO xy (z) Value ("")"
    puis je passe cet adapter à une méthode qui effectue l'insertion. Cette méthode ce connecte et se déconnecte de la base de données.

    Directement après j'effectue un SELECT * FROM xy depuis une Fonction qui me retourne un dataSet que je Bind à une dataGrid afin de mettre à jour mon composant graphique.

    Grid.DataSource = DataSet.

    Le problème semble que la base de donnée n'est pas encore mise à jours. Par conséquent lorsque je récupère mes données dans le dataSet mon insert n'est pas encore enregistré. Si je fais un refresh quelque millisecondes plus tard mes données sont affichées correctement. Je pourrais utiliser une méthode qui patiente quelque milliseconde mais cela ne me paraît pas correcte et il pourrait y avoir un risque d'erreur si je n’attends pas suffisamment.



    Donc si je récapitule le tout voilà ce que je fais.

    1) Insert into en passant par un adapteur.
    2) recharge les données depuis la database (DataSet)
    !!!!!!!! Problème car le select pour remplir mon dataSet ne charge pas
    les données qui viennent d’être insérée.
    3) Je les affiche dans une dataGrid (bind ma grille au dataSet)



    Quelqu'un pourrait-il m'éclairé afin d'afficher correctement les données dans ma dataGrid.


    Merci d'avance de vos réponse et à bientôt. Jeriko

  2. #2
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 82
    Points : 92
    Points
    92
    Par défaut
    Bonsoir,

    Peux tu nous faire voir ton code stp.

    merci

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Il est à noter que je travaille toujours en mode déconnecté!
    Si je travaille avec un ensemble de classes

    Dim dbCommandWrapper As clsDBCommandWrapper = Me.objDataBase.GetSqlStringCommandWrapper(sqlCommand)

    c'est afin d'avoir une abstration des bases de données que j'utilise.

    ACCESS / MSSQL / ORACLE ...

    Donc comment mettre à jours ma vue sans attendre que la base de données aie finit sont insertion. si je résume les étapes.

    1) CONNECTION / insert / CLOSE CONNECTION

    2) CONNECTION / SELECT DATA QUE JE VEUX RAPPATRIER / CLOSE CONNECTION


    3) BIND DU RESULTAT DU SELECT A MA GRILLE.DATASOURCE = DATASET

    LE PROBLEME est la syncronisation du point 1 données pas complétement insérée et le point 2 les dernières données insérées ne sont pas selectionnées.

    Comment faire ces opérations en attendant juste le temps de l'insértion puis directement récupérer mon resultat dans mon dataSet mise à jours avec les dernières données.

    MERCI de vos réponses




    1ère éatpe ! L'insertion

    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
    Public class SQLDM
     
    Public Function Insert_TItem(ByVal path As String, ByVal sfileName As String, ByVal inspectionID As String, _
                               ByVal sComment As String, ByVal sFileExtention As String, ByVal arrayOfID As ArrayList) As Boolean
             Dim transaction As IDbTransaction
             Try
                Dim NewDMSD_ID As Long = GetNextDMSD_ID()
     
                ' Insert data Into DMSD_T
                Dim sqlCommand As String = "INSERT INTO DM_T (DM_ID,DM_DOCUMENT_PATH,DM_DOCUMENT_NAME,DM_COMMENT," & _
                "DM_INSERTED, DM_FILE_EXTENTION) VALUES ( " & NewDMSD_ID & ",'" & path & "','" & sfileName & "','" & _
                sComment & "','" & Date.Now.ToString & "','" & sFileExtention & "') ;"
     
     
                Dim dbCommandWrapper As clsDBCommandWrapper = Me.objDataBase.GetSqlStringCommandWrapper(sqlCommand)
                'transaction = Me.objDataBase.GetConnection.BeginTransaction(IsolationLevel.Serializable)
                Me.objDataBase.ExecuteNonQuery(dbCommandWrapper) ', transaction)
     
                ' Insert Data Into R_DMSD_T    (Relation's table) fk fk 
                For i As Integer = 0 To arrayOfID.Count - 1
                   sqlCommand = "INSERT INTO R_DM_CAT_T (DM_T_DM_ID,CAT_CAT_ID) VALUES (" & NewDMSD_ID.ToString & "," & CStr(arrayOfID.Item(i)) & ");"
                   dbCommandWrapper = Me.objDataBase.GetSqlStringCommandWrapper(sqlCommand)
                   Me.objDataBase.ExecuteNonQuery(dbCommandWrapper) ', transaction)
                Next
                sqlCommand = "INSERT INTO R_SI_T_DM_T (SI_T_SI_ID, DMSD_T_DMSD_ID) VALUES ('" & inspectionID.ToString & "'," & NewDMSD_ID.ToString & ");"
                dbCommandWrapper = Me.objDataBase.GetSqlStringCommandWrapper(sqlCommand)
                Me.objDataBase.ExecuteNonQuery(dbCommandWrapper) ', transaction)
                'transaction.Commit()
             Catch ex As Exception
                Debug.WriteLine(ex.ToString)
                clsLogFile.SetData("Transaction Rollback ! " & ex.Message)
                'transaction.Rollback()
             End Try
          End Function
    2ème étape la mise à jours de la vue


    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
    Private Sub BindGridToDM_T(ByVal ds As DataSet)
             Dim iCounter As Integer = 0
             Dim dataTable As dataTable = ds.Tables("Table")
             Me.ulGridDoucments.SetDataBinding(ds, "Table")
             Dim band As UltraGridBand = Me.ulGridDoucments.DisplayLayout.Bands(0)
    
             For Each dtc As DataColumn In ds.Tables(0).Columns
                Dim sColumnName As String = dtc.ColumnName
                Select Case sColumnName
                   Case "DMSD_ID", "DMSD_DOCUMENT_PATH", "DMSD_COMMENT"
                      dtc.ColumnMapping = MappingType.Hidden
                      band.Columns(iCounter).Hidden = True
                   Case "DMSD_DOCUMENT_NAME"
                      band.Columns(iCounter).Header.Caption = "Document"
                   Case "DMSD_INSERTED"
                      band.Columns(iCounter).Header.Caption = "Inserted"
                      Dim longDate As String = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern & "  " & _
                      System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern
                      band.Columns(iCounter).Format = longDate
                      band.Columns(iCounter).AutoEdit = False
                      band.Columns(iCounter).CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit
                   Case "DMSD_FILE_EXTENTION"
                      band.Columns(iCounter).Header.Caption = "Icon"
                      band.Columns(iCounter).Width = 50
                End Select
                iCounter += 1
             Next
             Me.SetIconMatchingToFile()
             Me.setNumberOfItems() ' set upate

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Est-ce que la façon de procéder est correcte ?
    Pas de réponse ! Pas d'avis! Pas de dialogue!

    Laissez votre point de vue comme ça je pourrai avancer!


    Merci et à +

  5. #5
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    je ne vois pas à quel endroit tu refais le select

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Je recharge toutes les données depuis la DB
    ''' Je recharge toutes les données depuis la DB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Public Function GetDMSGridDataSet() As DataSet
             Dim dsResult As DataSet = New DataSet
             Dim sqlCommand As String = "SELECT * FROM DM_T;"
             Dim dbCommandWrapper As clsDBCommandWrapper = Me.objDataBase.GetSqlStringCommandWrapper(sqlCommand)
             dsResult = Me.objDataBase.ExecuteDataSet(dbCommandWrapper)
             Return dsResult
          End Function
    ''' Je bind mon dataSet à ma Grille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub BindGridToDM_T(ByVal ds As DataSet)
    Dim iCounter As Integer = 0
    Dim dataTable As dataTable = ds.Tables("Table")
    Me.ulGridDoucments.SetDataBinding(ds, "Table") 
    Dim band As UltraGridBand = Me.ulGridDoucments.DisplayLayout.Bands(0)
    End sub

    Je fais cela pour chaque update insert delete!

Discussions similaires

  1. [ODBC] Faire une requête INSERT, DELETE, UPDATE
    Par avogadro dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/09/2006, 11h35
  2. [C#][ADO.NET][2.0] Comment inserer des enregistrement ....
    Par doccpu dans le forum Accès aux données
    Réponses: 2
    Dernier message: 02/03/2006, 14h39
  3. [VB NET] [ADO NET]: Insertion de données DATE ds une BDD ??
    Par ADONET dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/01/2006, 20h24
  4. événement sur INSERT, DELETE, UPDATE
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/12/2004, 15h40
  5. Réponses: 4
    Dernier message: 02/07/2004, 10h31

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