OVH Cloud OVH Cloud

TableDirect et Parameter ?

6 réponses
Avatar
MagicBuzz
Bonjour,

Je cherche désespérément à filtrer le résultat d'un accès à ma base via
"TableDirect", afin de ne retourner que les lignes qui correspondent à
certains critères.

Il semblerait que mes paramètres (OleDbParameter) soient totalement ignorés !
Impossible ensuite de trouver une clause "Filter" ni dans mon DataSet, ni
dans mon DataAdapter, ni même mon DataGrid. Résultat, je suis condamné à
écrire comme un goret une requête SQL à la volée de façon à pouvoir utiliser
mes paramètres...

Comment faire ?
--
If you can read this, you can read the post above

6 réponses

Avatar
cpasmwalolo
Le DataSet a un default view .... dataset.DefaultView.Filter :-) Mais cela
ne filtre les données qu'au niveau de la mémoire.

"MagicBuzz" wrote in message
news:
Bonjour,

Je cherche désespérément à filtrer le résultat d'un accès à ma base via
"TableDirect", afin de ne retourner que les lignes qui correspondent à
certains critères.

Il semblerait que mes paramètres (OleDbParameter) soient totalement
ignorés !
Impossible ensuite de trouver une clause "Filter" ni dans mon DataSet, ni
dans mon DataAdapter, ni même mon DataGrid. Résultat, je suis condamné à
écrire comme un goret une requête SQL à la volée de façon à pouvoir
utiliser
mes paramètres...

Comment faire ?
--
If you can read this, you can read the post above


Avatar
MagicBuzz
Bonjour,

Merci pour cette réponse.
En effet, ça marche comme ça. Sauf que mes vues retournent... quelques
centaines de millions de lignes et IIS n'a pas apprécié du tout la blague,
arf !

Du coup je me suis résolu à utiliser la bonne méthode old school, de l'age
de l'ASP 1.0 sous NT 3.51 (allez magicbuzz, continue à remuer le couteau dans
la plaie).

Je ne comprends vraiment pas comment il est possible que dans le FrameWork
2.0, les dernières libs de MDAC, il ne soit pas possible de filter les
données d'une table... Techniquement, c'est pourtant bien plus simple à faire
que passer des paramètres à une requête sql !

Vive la construction dynamique de requêtes buggées. Heureusement que mon
modèle des données n'utilise pas de noms exotiques pour les champs, sinon
adieu la portabilité.
--
If you can read this, you can read the post above


"" wrote:

Le DataSet a un default view .... dataset.DefaultView.Filter :-) Mais cela
ne filtre les données qu'au niveau de la mémoire.

"MagicBuzz" wrote in message
news:
> Bonjour,
>
> Je cherche désespérément à filtrer le résultat d'un accès à ma base via
> "TableDirect", afin de ne retourner que les lignes qui correspondent à
> certains critères.
>
> Il semblerait que mes paramètres (OleDbParameter) soient totalement
> ignorés !
> Impossible ensuite de trouver une clause "Filter" ni dans mon DataSet, ni
> dans mon DataAdapter, ni même mon DataGrid. Résultat, je suis condamné à
> écrire comme un goret une requête SQL à la volée de façon à pouvoir
> utiliser
> mes paramètres...
>
> Comment faire ?
> --
> If you can read this, you can read the post above





Avatar
Gilles TOURREAU
Le Wed, 21 Mar 2007 11:12:03 +0100, MagicBuzz
a écrit:

Bonjour,

Merci pour cette réponse.
En effet, ça marche comme ça. Sauf que mes vues retournent... quelques
centaines de millions de lignes et IIS n'a pas apprécié du tout la
blague,
arf !

Du coup je me suis résolu à utiliser la bonne méthode old school, de
l'age
de l'ASP 1.0 sous NT 3.51 (allez magicbuzz, continue à remuer le couteau
dans
la plaie).

Je ne comprends vraiment pas comment il est possible que dans le
FrameWork
2.0, les dernières libs de MDAC, il ne soit pas possible de filter les
données d'une table... Techniquement, c'est pourtant bien plus simple à
faire
que passer des paramètres à une requête sql !

Vive la construction dynamique de requêtes buggées. Heureusement que mon
modèle des données n'utilise pas de noms exotiques pour les champs, sinon
adieu la portabilité.



Est-ce que vous pouvez nous montrer votre requête ainsi que les
OleDbParameter et OleDbCommand mis en jeu ?

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
MagicBuzz
Je n'ai pas le code en tête, et je n'y ai pas accès pour le moment, mais en
gros :

OleDbCommand cmd = cnx.CreateCommand();
cmd.CommandType = CommandType.TableDirect;
cmd.CommandText = "mytable";
OleDbParameter p = cmd.CreateParameter();
p.ParameterName = "myfield";
p.DBType = DBType.AnsiString;
P.Size = 30;
p.Value = "toto va à la plage";
cmd.Parameter.Add(p);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

=> Et là, mon "ds" contient toute la table, sans tenir compte du filtre sur
mon champ "myfield".

Du coup, pour travailler, je dois aller faire un "select * from matable" et
rajouter une clause "where" avec les différents champs à filtrer, de façon
dynamique, c'est à dire la meilleure source de plantage possible, sans parler
de la baisse significative de performances, puisque c'est un commandtext
différent qui est exécuté à chaque fois : (perte TOTALE de l'intérêt d'une
requête paramétrée, si ce n'est la protection contre le SQL Injection)
--
If you can read this, you can read the post above


"Gilles TOURREAU" wrote:

Le Wed, 21 Mar 2007 11:12:03 +0100, MagicBuzz
a écrit:

> Bonjour,
>
> Merci pour cette réponse.
> En effet, ça marche comme ça. Sauf que mes vues retournent... quelques
> centaines de millions de lignes et IIS n'a pas apprécié du tout la
> blague,
> arf !
>
> Du coup je me suis résolu à utiliser la bonne méthode old school, de
> l'age
> de l'ASP 1.0 sous NT 3.51 (allez magicbuzz, continue à remuer le couteau
> dans
> la plaie).
>
> Je ne comprends vraiment pas comment il est possible que dans le
> FrameWork
> 2.0, les dernières libs de MDAC, il ne soit pas possible de filter les
> données d'une table... Techniquement, c'est pourtant bien plus simple à
> faire
> que passer des paramètres à une requête sql !
>
> Vive la construction dynamique de requêtes buggées. Heureusement que mon
> modèle des données n'utilise pas de noms exotiques pour les champs, sinon
> adieu la portabilité.

Est-ce que vous pouvez nous montrer votre requête ainsi que les
OleDbParameter et OleDbCommand mis en jeu ?

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr



Avatar
Fred
Dans : news:,
MagicBuzz disait :
Bonjour,



Bonjour,

Je cherche désespérément à filtrer le résultat d'un accès à ma base
via "TableDirect", afin de ne retourner que les lignes qui
correspondent à certains critères.

Il semblerait que mes paramètres (OleDbParameter) soient totalement
ignorés !



J'ignorais que des paramètres pouvaient être utilisés avec un
TableDirect.

Impossible ensuite de trouver une clause "Filter" ni dans
mon DataSet, ni dans mon DataAdapter, ni même mon DataGrid. Résultat,
je suis condamné à écrire comme un goret une requête SQL à la volée
de façon à pouvoir utiliser mes paramètres...

Comment faire ?



Récupérer le schéma des tables et générer des requêtes paramétrées
proprement ?
Le schéma est utile si certaines colonnes peuvent-être nulles car je ne
suis pas sûr qu'une syntaxe telle que :
WHERE col1 = ?
fonctionne correctement si ? est nul.

--
Fred
Avatar
Paul Bacelar
La doc. MSDN
http://msdn2.microsoft.com/fr-fr/library/system.data.commandtype(VS.80).aspx
semble assez clair sur le fait qu'il n'y a pas de filtrage sur la table.
Utilisez une requête paramétrée, ou mieux, une procédure stockée.

--
Paul Bacelar
MVP VC++

"MagicBuzz" wrote in message
news:
Je n'ai pas le code en tête, et je n'y ai pas accès pour le moment, mais
en
gros :

OleDbCommand cmd = cnx.CreateCommand();
cmd.CommandType = CommandType.TableDirect;
cmd.CommandText = "mytable";
OleDbParameter p = cmd.CreateParameter();
p.ParameterName = "myfield";
p.DBType = DBType.AnsiString;
P.Size = 30;
p.Value = "toto va à la plage";
cmd.Parameter.Add(p);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

=> Et là, mon "ds" contient toute la table, sans tenir compte du filtre
sur
mon champ "myfield".

Du coup, pour travailler, je dois aller faire un "select * from matable"
et
rajouter une clause "where" avec les différents champs à filtrer, de façon
dynamique, c'est à dire la meilleure source de plantage possible, sans
parler
de la baisse significative de performances, puisque c'est un commandtext
différent qui est exécuté à chaque fois : (perte TOTALE de l'intérêt d'une
requête paramétrée, si ce n'est la protection contre le SQL Injection)
--
If you can read this, you can read the post above


"Gilles TOURREAU" wrote:

Le Wed, 21 Mar 2007 11:12:03 +0100, MagicBuzz
a écrit:

> Bonjour,
>
> Merci pour cette réponse.
> En effet, ça marche comme ça. Sauf que mes vues retournent... quelques
> centaines de millions de lignes et IIS n'a pas apprécié du tout la
> blague,
> arf !
>
> Du coup je me suis résolu à utiliser la bonne méthode old school, de
> l'age
> de l'ASP 1.0 sous NT 3.51 (allez magicbuzz, continue à remuer le
> couteau
> dans
> la plaie).
>
> Je ne comprends vraiment pas comment il est possible que dans le
> FrameWork
> 2.0, les dernières libs de MDAC, il ne soit pas possible de filter les
> données d'une table... Techniquement, c'est pourtant bien plus simple à
> faire
> que passer des paramètres à une requête sql !
>
> Vive la construction dynamique de requêtes buggées. Heureusement que
> mon
> modèle des données n'utilise pas de noms exotiques pour les champs,
> sinon
> adieu la portabilité.

Est-ce que vous pouvez nous montrer votre requête ainsi que les
OleDbParameter et OleDbCommand mis en jeu ?

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr