Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment rendre un DataTable indépendant de la source de données ?

6 réponses
Avatar
olivier
Bonjour,

Comment rendre un DataTable indépendant de la source de données ?

Je m'explique :
Je remplis un datatable avec dataadaptateur, ensuite je lie mon datagrid
avec le datatable
Tout est OK, je peux modifier les valeurs dans mon datagrid etc. OK tout va
bien

Je fais la même chose avec un datareader et là, je ne peut plus modifier
dans le datagrid !!

Pourquoi ?
Puis-je contourner ce problème ?

Merci
Olivier

SQL serveur 2005/2008
.Net 2.0/3.0

6 réponses

Avatar
ChC2B
Bonjour,

L'utilisation d'un datareader n'est pas ce qu'il y a de mieux en raison
du mode exclusif généré sur l'objet connection sous-jacent. (Bon ceci
n'est que mon humble avis)
CF : http://msdn.microsoft.com/fr-fr/library/haa3afyz(VS.80).aspx

Pour ma part j'ai opté pour un traitement différencié pour chaque table
ou requete de ma base je défini un objet qui comporte un:
system.generic.collections.typeof(monobjet)
et un
Bindingcollections associé (attention synchro des remove, add et clear)
Ce qui permet de gérer les accès à la base avec des SELECT FROM... pour
remplir la liste. De lier les contrôle avec le bindingcollection
de faire des mise à jour ou autre avec une clause SQL.

Ceci permet de maîtriser l'accès à la BD le temps d'une fonction, de
lier facilement les données à un ou des contrôles.

A+




olivier a écrit :
Bonjour,

Comment rendre un DataTable indépendant de la source de données ?

Je m'explique :
Je remplis un datatable avec dataadaptateur, ensuite je lie mon datagrid
avec le datatable
Tout est OK, je peux modifier les valeurs dans mon datagrid etc. OK tout va
bien

Je fais la même chose avec un datareader et là, je ne peut plus modifier
dans le datagrid !!

Pourquoi ?
Puis-je contourner ce problème ?

Merci
Olivier

SQL serveur 2005/2008
.Net 2.0/3.0




Avatar
Richard Clark
ChC2B a écrit :
Bonjour,

L'utilisation d'un datareader n'est pas ce qu'il y a de mieux en raison
du mode exclusif généré sur l'objet connection sous-jacent. (Bon ceci
n'est que mon humble avis)
CF : http://msdn.microsoft.com/fr-fr/library/haa3afyz(VS.80).aspx

Pour ma part j'ai opté pour un traitement différencié pour chaque table
ou requete de ma base je défini un objet qui comporte un:
system.generic.collections.typeof(monobjet)
et un
Bindingcollections associé (attention synchro des remove, add et clear)
Ce qui permet de gérer les accès à la base avec des SELECT FROM... pour
remplir la liste. De lier les contrôle avec le bindingcollection
de faire des mise à jour ou autre avec une clause SQL.

Ceci permet de maîtriser l'accès à la BD le temps d'une fonction, de
lier facilement les données à un ou des contrôles.

A+




olivier a écrit :
Bonjour,

Comment rendre un DataTable indépendant de la source de données ?

Je m'explique :
Je remplis un datatable avec dataadaptateur, ensuite je lie mon
datagrid avec le datatable
Tout est OK, je peux modifier les valeurs dans mon datagrid etc. OK
tout va bien

Je fais la même chose avec un datareader et là, je ne peut plus
modifier dans le datagrid !!

Pourquoi ?
Puis-je contourner ce problème ?

Merci
Olivier

SQL serveur 2005/2008
.Net 2.0/3.0







Je comprends pas ta réponse sur le DataReader. Pour lire les données
d'une base, y'a que le Datareader de possible ?!
A moins que tu veuilles dire de ne pas lier un objet graphique avec le
Datareader directement.

--
Richard Clark
http://www.c2i.fr
Le 1er site .NET
Avatar
ChC2B
Bonjour,

Bon je suis pas un pro et j'ai pas VS2008 sous la main,

Mais de mémoire
Pour lire des données

J'utilise un DataAdapter du style
Dim adapter As DataAdapter = New DataAdapter( _
queryString, connection)

un dataset
da.fill(ds)
ensuite j'obtient un datarow à partir de la table du dataset
puis j'affecte chaque row à un objet (que j'ajoute à ma collection )

Pour faire une mise à jour j'utilise le même procédé avec une requête UPDATE

En fait ce que je voulais signifier c'est que j'utilise en mémoire une
collection d'objet déconnectés de la base et que seule l'utilisation des
fonction Lire(),Enregistre(), MAJ() Supprime() de mon objet (fonctions
basées sur le principe précédent) accède à la BD le temps de leur exécution.

Si je suis pas clair dis le je prendrais un exemple de code au bureau.

A+
Avatar
Richard Clark
ChC2B a écrit :
Bonjour,

Bon je suis pas un pro et j'ai pas VS2008 sous la main,

Mais de mémoire
Pour lire des données

J'utilise un DataAdapter du style
Dim adapter As DataAdapter = New DataAdapter( _
queryString, connection)

un dataset
da.fill(ds)
ensuite j'obtient un datarow à partir de la table du dataset
puis j'affecte chaque row à un objet (que j'ajoute à ma collection )

Pour faire une mise à jour j'utilise le même procédé avec une requête
UPDATE

En fait ce que je voulais signifier c'est que j'utilise en mémoire une
collection d'objet déconnectés de la base et que seule l'utilisation des
fonction Lire(),Enregistre(), MAJ() Supprime() de mon objet (fonctions
basées sur le principe précédent) accède à la BD le temps de leur
exécution.

Si je suis pas clair dis le je prendrais un exemple de code au bureau.

A+





C'est la solution la plus rapide, pas forcement la plus optimisée.
De toutes façons, le DataAdapter utilise en interne un DataReader.

--
Richard Clark
http://www.c2i.fr
Le 1er site .NET
Avatar
vanderghast
De toutes façons, un DataReader, c'est du Read Only Forward Only (firehose),
par 'définition', on ne peut donc pas l'utiliser pour modifier les données.

Vanderghast, Access MVP
Avatar
eddymaue
Ca fait du sens DataReader = lecteur de données ;-)

a+ et bonne journée

vanderghast a présenté l'énoncé suivant :
De toutes façons, un DataReader, c'est du Read Only Forward Only (firehose),
par 'définition', on ne peut donc pas l'utiliser pour modifier les données.

Vanderghast, Access MVP