DataSet ou Recordset?

woot6768 Messages postés 393 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 23 mars 2007 - 6 juil. 2006 à 11:25
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 - 10 août 2006 à 21:20
Salut à tous,
Voilà, je me pose une quetion suite à un souci, lorsque je souhaite effectuer des modifications dans un ou plusieurs champs d'une table access, le programme n'en finie pas de s'éxécuter! (que ce soit en debugg ou non...)
Mes questions sont donc les suivantes :

Est-ce que le souci peu venir du fait que j'utilise des Recordset et que c'est lent?
Est-ce possible de faire le traitement avec les DataSet?
Ou alors est-ce moi qui a fait, ou oublier de faire quelque chose?

Je vous passe deux fonctions de mon code pour que vous sachiez de quoi il s'agit : (Pour la 1ère, quand je limite le nombre de champs ça fonctionne! Et pour la seconde je ne suis pas sûr de ma requête DELETE...)
1ère fonction :

public
void NettoyeProprietaire(){

InitialiserCorrespondances();

string lineCmd =
"UPDATE M9004_CONTACTSYNC SET CIVILITY='{0}', FULLNAME='{1}', FIRSTNAME='{2}', LASTNAME='{3}' WHERE CONTACTSYNCID= {4} ";

string req =
"SELECT CIVILITY, FULLNAME, FIRSTNAME, LASTNAME, CONTACTSYNCID FROM M9004_CONTACTSYNC ";ADODB.

Recordset Recordset =
new ADODB.
Recordset();Recordset.Open(req, chaineDeConnection2, ADODB.

CursorTypeEnum.adOpenKeyset, ADODB.
LockTypeEnum.adLockOptimistic, -1);

Collection<
string> exclusP = GetExclusAutresProprietaire;

string CIV;

string FULL;

string FIRST;

string LAST;

if (Recordset.RecordCount > 0){

Recordset.MoveFirst();

while (!(Recordset.EOF)){
CIV "";FULL
"";FIRST "";LAST

"";ADODB.

Field field1 = Recordset.Fields[
"CIVILITY"];

if (field1.Value !=
DBNull.Value){

if (
Convert.ToString(Recordset.Fields[
"CIVILITY"]).Length > 0){

CIV = Recordset.Fields[

"CIVILITY"].Value.ToString();CIV = (CleanEspaces(CIV)).Trim();

CIV = Cleanup((Recordset.Fields[

"CIVILITY"].Value).ToString(), limite_autres);CIV = EpurerNom(CIV, exclusP);

}

}

ADODB.

Field field2 = Recordset.Fields[
"FULLNAME"];

if (field2.Value !=
DBNull.Value){

if (
Convert.ToString(Recordset.Fields[
"FULLNAME"]).Length > 0){

FULL = Recordset.Fields[

"FULLNAME"].Value.ToString();FULL = (CleanEspaces(FULL)).Trim();

FULL = Cleanup((Recordset.Fields[

"FULLNAME"].Value).ToString(), limite_autres);}

}

ADODB.

Field field3 = Recordset.Fields[
"FIRSTNAME"];

if (field3.Value !=
DBNull.Value){

if (
Convert.ToString(Recordset.Fields[
"FIRSTNAME"]).Length > 0){

FIRST = Recordset.Fields[

"FIRSTNAME"].Value.ToString();FIRST = (CleanEspaces(FIRST)).Trim();

FIRST = Cleanup((Recordset.Fields[

"FIRSTNAME"].Value).ToString(), limite_autres);}

}

ADODB.

Field field4 = Recordset.Fields[
"LASTNAME"];

if (field4.Value !=
DBNull.Value){

if (
Convert.ToString(Recordset.Fields[
"LASTNAME"]).Length > 0){

LAST = Recordset.Fields[

"LASTNAME"].Value.ToString();LAST = (CleanEspaces(LAST)).Trim();

LAST = Cleanup((Recordset.Fields[

"LASTNAME"].Value).ToString(), limite_autres);}

}

lineCmd =

String.Format(lineCmd, CIV.Trim(), FULL.Trim(), FIRST.Trim(), LAST.Trim(), Recordset.Fields[
"CONTACTSYNCID"].Value);

OdbcCommand cmd =
new
OdbcCommand(lineCmd, connection2);cmd.ExecuteNonQuery();

Recordset.MoveNext();

}

}

Recordset.Close();

MessageBox.Show(
"Fonction NettoyeProprietaire() terminée.");}

La 2ème fonction :

public
void NettoyeInitialles(){

string req =
"SELECT INITIALS FROM M9004_CONTACTSYNC";

string lineCmd =
"DELETE FROM M9004_CONTACTSYNC WHERE INITIALS='{0}'";ADODB.

Recordset Recordset =
new ADODB.
Recordset();Recordset.Open(req, chaineDeConnection2, ADODB.

CursorTypeEnum.adOpenKeyset, ADODB.
LockTypeEnum.adLockOptimistic, -1);

while (!(Recordset.EOF)){

lineCmd =

String.Format(lineCmd, Recordset.Fields[
"INITIALS"].Value);

OdbcCommand cmd =
new
OdbcCommand(lineCmd, connection2);cmd.ExecuteNonQuery();

Recordset.MoveNext();

}

Recordset.Close();

MessageBox.Show(
"Fonction NettoyeInitialles() terminée.");}

Merci de votre attention en éspèrant une ou plusieurs réponses...

_________________________________________________________________________
Woot

1 réponse

cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
10 août 2006 à 21:20
Comme ton traitement ne semble pas faire de mise à jour (ton boucle enregistrement par enregistrement et fait un insert sur chaque) utilise plutôt ces options pour le Recordset :

adOpenForwardOnly
adLockReadOnly

C'est le comportement qui se rapproche le plus du DataReader (le + rapide en lecture seule).

Pour les INSERT / DELETE je pense que c'est bon.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
0
Rejoignez-nous