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

Windows Mobile .NET Discussion :

[WCE] Charger une table depuis un dataset


Sujet :

Windows Mobile .NET

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut [WCE] Charger une table depuis un dataset
    Bonjour à tous,

    J'ai fait, dans un web service, une fonction qui renvoie un dataset.
    J'aimerais charger directement ma table en local depuis ce dataset.

    Il est bien sur possible de parcourir toutes les données et de faire un insert à chaque fois mais je suis sur qu'il y a plus court et plus optimisé.

    J'ai cru voir qu'il était possible de faire ça avec un DataBind...
    J'ai essayé diverses manip mais le résultat est catastrophique.

    Comment faire ?

    Merci d'avance.
    David.

  2. #2
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    J'aimerais m'en assurer:
    DataBind est bien le contraire de fill, nan ?
    David.

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour,

    J'était sur le mauvais chemin, l'inverse de fill est update...

    Mais là, j'ai vraiment besoin d'aide.. Je tourne en rond depuis longtemps.
    J'ai une fonction en webservice qui marche très bien.
    Elle me renvoie un dataset bien rempli:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        <WebMethod()> Function getAllItems() As System.Data.DataSet
            Dim objDataAdapter As OleDbDataAdapter
            Dim objDataSet As New System.Data.DataSet
     
            objDataAdapter = New OleDbDataAdapter("SELECT code,lib,qte,0 as modif FROM Table1", myConnStr)
            objDataAdapter.Fill(objDataSet, "TEST")
            Return objDataSet 
        End Function
    Ensuite, du coté Pocket PC/WindowsCe, j'ai une fonction censée remplir la base locale depuis ce dataset:
    Struncture de latable: "CREATE TABLE TEST (code nvarchar(50) NOT NULL PRIMARY KEY, lib nvarchar(250) DEFAULT NULL,qte INTEGER NOT NULL DEFAULT 0, modif INTEGER NOT NULL DEFAULT 0)
    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
                If creerBase() = 1 Then
                    viderTable()
                End If
                Dim myDst As New System.Data.DataSet
                myDst = wsInv.getAllItems()
                If IsDBNull(myDst) Then
                    setInfo("Pas de données " & desc)
                Else
                    Try
                        Using myconn As New SqlCeConnection(conStr)
                            'myconn.Open()
                            Dim adapter As New SqlCeDataAdapter("select * from " & nomTableLocal, myconn)
                            'adapter.selectcommand = new sqlcecommand("select * from " & nomtablelocal, myconn)
                            Dim builder As SqlCeCommandBuilder = New SqlCeCommandBuilder(adapter)
                            adapter.UpdateCommand = builder.GetUpdateCommand
                            adapter.DeleteCommand = builder.GetDeleteCommand 'new sqlcecommand("delete from test", myconn)
                            adapter.InsertCommand = New SqlCeCommand("insert into " & nomTableLocal & " (code,lib,qte) values (@param1,'desc',1)", myconn)
                            Dim param1 As New SqlCeParameter("@param1", SqlDbType.NVarChar, 50, "code")
                            param1.SourceVersion = DataRowVersion.Original
                            adapter.InsertCommand.Parameters.Add(param1)
                            'adapter.Fill(myDst)
                            Dim row As DataRow
                            Dim column As DataColumn
                            For Each row In myDst.Tables(0).Rows
                                For Each column In myDst.Tables(0).Columns
                                    desc = desc & row(column) & " "
                                Next column
                                desc = desc & vbCrLf
                            Next row
                            adapter.Update(myDst.Tables(0))
                        End Using
     
                        setInfo("transfert réussi " & vbCrLf & myDst.Tables(0).TableName & vbCrLf & desc)
                    Catch err As Exception
                        setInfo(err.ToString, True)
                    Finally
                        'myconn.close()
                        'myconn.dispose()
                    End Try
                End If
    Mais rien n'y fait... Il m'affiche bien "transfert réussi" avec les 5 enregistrements que contient le dataset mais ma base reste définitivement vide.

    Qu'est ce qui ne va pas ?
    David.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 15
    Points
    15
    Par défaut Reprendre une table
    J'ai eu le même probleme qui venait du fait que le commandBuilder qui est censé te donner les bonnes InsertSelect, UpdateSelecte ne fonctionne pas si tu n'a pas avant "initialiser" ta table (qui est pour le moment si j'ai bien compris completement independant de ta base de données).

    Pour se faire, j'ai résolu le pb en faisant soit un select qui (j'en suis sur) ne me trouvera aucunes donnees et je fais un Fill dans ce datatable qui devient "dependant", soit un FillSchema qui te reconstruit les binding (sources-datatable)

    MAIS:

    Je change de stratégie, car pour il faut compter presque 5 minutes pour une datatable de 2300 enregistrements à inserer .... Je trouve SQL Server Mobile excessivement lent. Je vais transferer ma datatable en binaire avec une recherche dichotomique de mes enregistrements (je n'ai qu'une primarykey en string et 99% de mes acces seront que de la lecture sans insertion de données)

    A ton service

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour JmbBoubou,

    Merci pour ta réponse mais je ne peux malheureusement pas l'essayer maintenant (j'ai planté la connexion USB de mon PPC ).

    Donc, si j'ai bien suivit, tu me dit de faire un truc comme ça:
    Dim adapter As New SqlCeDataAdapter("SELECT * FROM " & nomTableLocal & & " WHERE code='non-existant'", myconn)
    Ca me parrait bizarre que ma requete retourne quelque chose car je vide la table juste avant et elle est bien vide après le traitement.

    Et pour les insert et update, tu ne les renseignes pas ??? En créant l'objet il crée aussi les bonnes requêtes ?

    De plus, est ce qu'il faut faire un fill avant l'update ? (je ne vois pas bien l'interet...)

    Un p'tit bout de code serait le bienvenu.

    Merci d'avance.
    David.

  6. #6
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Suite à un problème que j'ai dans le même style, j'ai trouvé ce lien qui peut être t'aidera autant qu'il va m'aider.

    http://fr.gotdotnet.com/quickstart/h...ataFromDB.aspx
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Heu... Je le connais par coeur ce code...
    Celui que j'ai posté ci-dessus en est même calqué (après l'avoir essayé à la ligne près, j'ai fait un coctail de tous ceux que j'ai trouvé).

    L'inconvenient, c'est que tous les exemples existants partent d'une seule et même base... Contrairement à moi qui veux faire communiquer 2 bases qui se ressemblent.

    Merci de me dire si ça marche chez toi.
    David.

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    J'ai réussi à me reconnecter à mon PPC (en fait, je me suis connecté en WIFI sur un site intranet d'ou je télécharge le nouvel exe compilé et déplacé depuis un lien WEB... Quelle marrade ).

    J'ai donc pu tester ta méthode JmbBoubou mais ça ne donne rien de mieux.

    Peux tu me donner un bout de code STP ?
    David.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 15
    Points
    15
    Par défaut Mon Code
    Petit détail oublié mais qui fait tout (comme souvent) , je passe par une 2eme datatable qui reste vide ...
    Cela parait bizarre, mais c'est à force de relire la doc msdn que j'ai eu cette idée de passer par cette tricherie en initialisant la dataadapter avec une fausse table inutile .. Je sais, c'est pas trés propre mais cela marche sans problème



    Dim wCommand As SqlCeCommand
    Dim Ada As New SqlCeDataAdapter

    wCommand = PDA_BASE.Connection.CreateCommand
    wCommand.CommandType = CommandType.Text
    wCommand.CommandText = "SELECT meschamps FROM ARTICLES_DETAIL"

    Ada.SelectCommand = wCommand
    Dim db As New DataTable
    Ada.Fill(db)
    '---------------------------------------------------------------
    'je passe par une 2eme table qui reste vide qui qui fait fonctionner
    ' la cde .GetInsertCommand car Ada a initialisé les BindingsSources
    '---------------------------------------------------------------
    Dim cb As SqlCeCommandBuilder = New SqlCeCommandBuilder(Ada)
    cb.GetInsertCommand() 'pour construire la cde Insert
    '-------------------------------------------
    'il faut inserer les lignes articles reçues par TCP/IP
    '-------------------------------------------
    Try
    Ada.Update(.MyDataTable) 'La vraie table avec toutes les données
    Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Critical)
    Exit Do
    End Try

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 047
    Points : 1 042
    Points
    1 042
    Par défaut
    Bonjour,

    voila un exemple de code qui fonctionne parfaitement tu peux t'y inspirer
    Dim cmd As SqlCeCommand = cn.CreateCommand

    cmd.CommandText = "INSERT INTO [tbl intervention bon de sortie] (numEtatBS,RéfEntrepriseGMAO,numbonSortie,numOT,RéfBonCommande,RéfBonCommandeCL,Magasinier,EmployéDemande, [Date de demande], [Date prévue], [date de sortie],Remarque,Modification) values (?,?,?,?,?,?,?,?,?,?,?,?)"
    Dim NumBSMin As Integer = NumBSAjout()

    cmd.Parameters.Add("numEtatBS", numEtatDébutMem)
    cmd.Parameters.Add("RéfEntrepriseGMAO", RéfEntrepriseGMAO)
    cmd.Parameters.Add("numbonSortie", NumBSMin)
    If Me.TbNumOT.Text <> "" Then
    cmd.Parameters.Add("numOT", Me.TbNumOT.Text)
    Else
    cmd.Parameters.Add("numOT", 0)
    End If
    Select Case Me.lbBC.Text
    Case "BC client"
    cmd.Parameters.Add("RéfBonCommande", 0)
    cmd.Parameters.Add("RéfBonCommandeCL", Me.tbBC.Text)
    Case "BC entreprise"
    cmd.Parameters.Add("RéfBonCommande", Me.tbBC.Text)
    cmd.Parameters.Add("RéfBonCommandeCL", 0)
    Case Else
    cmd.Parameters.Add("RéfBonCommande", 0)
    cmd.Parameters.Add("RéfBonCommandeCL", 0)
    End Select
    cmd.Parameters.Add("Magasinier", RéfEmployéConnecté)

    cmd.Parameters.Add("EmployéDemande", nz(Me.cbEmployéDemande.SelectedValue, 0))
    cmd.Parameters.Add(" [date de Demande] ", DateTime.Today)
    cmd.Parameters.Add(" [date prévue] ", DateTime.Today) ''Me.tbDate_Prévue.Text)
    cmd.Parameters.Add(" [Date de sortie] ", DateTime.Today)
    cmd.Parameters.Add("remarque", Me.tbRemarque.Text)
    cmd.Parameters.Add("Modification", 1)
    cmd.ExecuteNonQuery() ''Display results of the Insert
    bonne journée

  11. #11
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour à tous,

    Et merci pour vos réponses, mais ça ne marche toujours pas...
    Mais j'ai soulevé un comportement qui peut, je pense, apporter une réponse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim myconn As New SqlCeConnection(conStr)
    Dim wCommand As SqlCeCommand
    Dim Ada As New SqlCeDataAdapter
    wCommand = myconn.CreateCommand
    wCommand.CommandType = CommandType.Text
    wCommand.CommandText = "SELECT code,lib,qte FROM " & nomTableLocal & " WHERE code='azerty'"
    Ada.SelectCommand = wCommand
    Dim myDst2 As New DataSet
    Ada.Fill(myDst2)
    Dim cb As SqlCeCommandBuilder = New SqlCeCommandBuilder(Ada)
    cb.GetInsertCommand() 'pour construire la cde Insert
    ' ENDROIT CONCERNE
    nbEnr = Ada.Update(myDst2.Tables(0)) 'La vraie table avec toutes les données
    setInfo(nbEnr & " MAJ sur " & myDst2.Tables(0).Rows.Count)
    Voila, je fait ça qui ne me met pas d'erreurs mais qui affiche: "0 MAJ sur 4"

    A l'endroit concerné, j'ai fait différents tests:
    1 - myDst2.Tables(0).Rows.Add(New Object() {"Nancy", "Smith", 2})
    Ajoute une ligne au dataset2 vide et affiche: "1 MAJ sur 1", ça marche donc bien

    2 - myDst2.Tables(0).Rows.Add(New Object() {myDst.Tables(0).Rows(1)(0), myDst.Tables(0).Rows(1)(1), myDst.Tables(0).Rows(1)(2)})
    Ajoute ma ligne au dataset2 vide et affiche: "1 MAJ sur 1", ça marche donc bien

    3 - myDst2.Tables(0).Rows.Add(myDst.Tables(0).Rows(1))
    Par contre, là, ça ne marche plus, il me fait une erreur:
    System argument exception... at .datatable.insertRow()

    4 - (j'ai vérifié, il n'y a bien que 3 colones dans les 2 datasets)
    setInfo(myDst.Tables(0).Rows(0)(0).GetType().ToString & " - " & myDst2.Tables(0).Rows(0)(0).GetType().ToString)
    setInfo(myDst.Tables(0).Rows(0)(1).GetType().ToString & " - " & myDst2.Tables(0).Rows(0)(1).GetType().ToString)
    setInfo(myDst.Tables(0).Rows(0)(2).GetType().ToString & " - " & myDst2.Tables(0).Rows(0)(2).GetType().ToString)
    Les types correspondent bien, pas de problème.

    Est ce que ça vous donne une idée ?
    David.

  12. #12
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Je viens de voir ça:
    http://msdn2.microsoft.com/en-us/library/9yfsd47w.aspx

    L'erreur ArgumentException vient de:
    The row either belongs to another table or already belongs to this table.
    (La rangée appartient à une autre table ou appartient déjà à cette table)
    Ce qui veut dire qu'il n'est pas possible d'ajouter une ligne venant d'une autre table ???

    Est ce que ça veut dire que ce que je veux faire n'est pas possible ?
    Comment cela se fait-il que ton exemple marche donc chez toi JmbBoubou ? (et pas chez moi ??? Qu'as tu fait de spécial ?)

    Je ne suis quand même pas le premier à vouloir rappatrier plusieurs enregistrments depuis un webService.

    Je crois que je vais crier.
    David.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 15
    Points
    15
    Par défaut
    Il faut absolument que les 2 tables soient identiques dans leur structure (les columns avec leur propriétés, les primary key). Je t'assure que chez moi, cela fonctionne sans problème. Je récapitule:

    1- Une table "construite à la main" ou receptionnée par transfert independante de la base de données

    2- Une deuxieme table directement liée à la base de donnée (methode fill) qui restera vide mais qui servira de reference à l'adaptateur de donnée.

    3- La methode Update appliquée sur la 1ere table (donc indépendante) qui bien sur à une structure identique.

    Bon courage, ça va marcher

  14. #14
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    En effet, dans ma webmethod j'ai remplacé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim objDataAdapter As OleDbDataAdapter
    Dim myDst As New System.Data.DataSet
    objDataAdapter = New OleDbDataAdapter("SELECT code,lib,qte FROM " & nomTableLocal, myConnStr)
    objDataAdapter.Fill(myDst, nomTable)
    Par:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
            Dim qte As Integer
            Dim myOleDbConn As OleDbConnection = Nothing ' la connexion
            Dim myRdr As OleDbDataReader = Nothing ' le lecteur de données
            Dim myDst As New DataSet
            Dim myDataTable As DataTable = New DataTable("table1")
            Dim myDataColumn As DataColumn
            myDataColumn = New DataColumn() ' Créer une première column.
            myDataColumn.DataType = System.Type.GetType("System.String")    'Type de la colonne
            myDataColumn.ColumnName = "code"                                 'Nom de la colonne
            myDataColumn.AutoIncrement = False
            myDataColumn.ReadOnly = False                                   'Colonne ReadOnly
            myDataColumn.Unique = True                                     'Evite les doublons  
            myDataTable.Columns.Add(myDataColumn)
            myDataColumn = New DataColumn() ' Créer une seconde column.
            myDataColumn.DataType = System.Type.GetType("System.String")
            myDataColumn.ColumnName = "lib"
            myDataColumn.AutoIncrement = False
            myDataColumn.ReadOnly = False
            myDataColumn.Unique = False
            myDataTable.Columns.Add(myDataColumn)
            myDataColumn = New DataColumn() ' Créer une troisième column.
            myDataColumn.DataType = System.Type.GetType("System.Int32")
            myDataColumn.ColumnName = "qte"
            myDataColumn.AutoIncrement = False
            myDataColumn.ReadOnly = False
            myDataColumn.Unique = False
            myDataTable.Columns.Add(myDataColumn)
            Dim PrimaryKeyColumns(0) As DataColumn 'La colonne id doit être une clé primaire.
            PrimaryKeyColumns(0) = myDataTable.Columns("code")
            myDataTable.PrimaryKey = PrimaryKeyColumns
            Try ' on tente d'accéder à la base de données
                myOleDbConn = New OleDbConnection(myConnStr)
                myOleDbConn.Open()
                req = "SELECT * FROM " & nomTableLocal
                Dim myOleDbCmd As New OleDbCommand(req)
                myOleDbCmd.Connection = myOleDbConn
                myRdr = myOleDbCmd.ExecuteReader()
                While myRdr.Read()
                    If Not IsDBNull(myRdr("qte")) And IsNumeric(myRdr("qte")) Then
                        qte = Convert.ToInt32(myRdr("qte"))
                    Else
                        qte = 0
                    End If
                    myDataTable.Rows.Add(New Object() {myRdr("code").ToString, myRdr("lib").ToString, qte})
                    nomTable = "Au moins 1:" & myRdr("code").ToString
                End While
            Catch ex As Exception
                nomTable = ex.Message
            Finally
                Try
                    myRdr.Close() ' fermeture lecteur
                Catch ex As Exception
                End Try
                myOleDbConn.Close() ' fermeture connexion
            End Try
            myDst.Tables.Add(myDataTable)
            Return myDst
    Et ça marche. (merci beaucoup pour ton aide)

    C'est tout de même dommage, la première solution est quand même plus courte, rapide, optimisée et remplit correctement le dataset.
    En fait, c'est juste windows qui regarde si le dataset n'est pas issu d'une autre table et bloque l'update si c'est le cas, je suppose.

    N'y a t-il pas moyen de prendre la première solution et changer la propriété du dataSet qui l'attache à cette table (propriété que j'ignore, forcement...) ?
    David.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 15
    Points
    15
    Par défaut
    Oui tu as raison mais comme je te l'ai dis dans mon premier message, je laisse tombé cette stratégie car je trouve SqlServer trop lent dans cette methode Update.

    Si tu veux faire quelque chose dans les régles de l'Art, je pense qu'il faudrait cherché dans les propriétés de DataAdapter (en comparant les valeurs avant et aprés le Fill bidon) pour en déduire les valeurs à initialiser avant l'Update. Je pense qu'il s'agit des BindingSources (Une collection qui fait le lien entre les noms de la table reelle de la base de données et la DataTable)

    J'ai vu que tu utilises un Dataset, c'est inutile si tu ne traite que des tables sans relation entre elles, tu peux peut être gagner des ressources..

    Mais à quoi bon quand une M... est résolue sans perte de performance et sans perdre trop de ressources, on peut s'en satisfaire surtout qu'on aura sans doute d'autres problèmes à venir .. alors ...

    Mais si tu persistes et trouve la manière propre, laisse un message
    Salut

  16. #16
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Très bien,

    Par contre, je ne pense pas qu'il soit possible de passer un datatable en webMethode.
    J'ai essayé en retour de fonction comme en paramètre byRef, il me fait une erreur:
    Value of type 'GT_Inventaire.informatique.getAllItemsResponseGetAllItemsResult' cannot be converted to 'System.Data.DataTable'.

    Alors que ma web fonction est bonne:
    Function getAllItems(ByRef nomTable As String) As System.Data.DataTable

    Me manque t-il une ref ou quelque chose du style ?
    David.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2009, 17h44
  2. [PL/SQL] Charger une table dans une collection
    Par nosnoss dans le forum Oracle
    Réponses: 10
    Dernier message: 03/03/2005, 17h56
  3. [Applet][JAR]Charger une applet depuis un fichier jar
    Par CappCorp dans le forum Applets
    Réponses: 8
    Dernier message: 23/11/2004, 13h08
  4. Mettre à jour une table depuis une autre
    Par rsc dans le forum SQL
    Réponses: 4
    Dernier message: 09/07/2004, 10h08
  5. Réponses: 7
    Dernier message: 18/06/2004, 09h58

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