OVH Cloud OVH Cloud

DataSets suffisants ou DataTables quand même

6 réponses
Avatar
Camelia
Bonjour,

J'ai un petit souci avec ma datatable qui reste un objet à Nothing dans mon
code alors que le dataset est chargé avec les bonnes données. Je ne comprends
pas pourquoi et je suis de ce fait obligé par exemple de travailler avec mon
dataset seulement est ce suffisant ou peut etre qu'il ya des propriétes de la
datatable que je rate de ce fait.

Voilà un bout de code :
Sachant que je lance une requête SQL complexe sur une table MaTable avec
jointure

dim MyDataSet ...

dim MyDataTable as DataTable

MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
puisque je récupère une requête, je mets le nom de la table sur laquelle
j'envoie une requête
ou
MyDataTable = MyDataSet.Tables(0) -- crée une erreur

--- celui ci marche parfaitement
dim x as string
x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString

---celui ci retourne un objet à Nothing pour la datatable
x = MyDataTable.Rows(i).Item("NomDuChamp").ToString


Je vous remercie pour votre aide!!

6 réponses

Avatar
Millox Frédéric
Salut Camelia,

Il y a des petites choses que je ne comprends pas dans ce que tu demandes :

1) MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
puisque je récupère une requête, je mets le nom de la table sur laquelle
j'envoie une requête

question : est-ce-que ça marche comme tu le fais là ?
car si oui je ne vois pas trop pourquoi MyDataTable = MyDataSet.Tables(0) te
crée une erreur car obligatoirement ton dataset MyDataSet contient au moins
un datatable.

3) MyDataTable = MyDataSet.Tables(0) te crée une erreur

question : quelle type d'erreur ?

3) MyDataTable = MyDataSet.Tables(0) te crée une erreur alors que tu dis que
x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString marche
parfaitement

Peux tu répondre à ces questions pour que je puisse te faire un début de
réponse ?

A+

--
fmillox


"Camelia" a écrit :

Bonjour,

J'ai un petit souci avec ma datatable qui reste un objet à Nothing dans mon
code alors que le dataset est chargé avec les bonnes données. Je ne comprends
pas pourquoi et je suis de ce fait obligé par exemple de travailler avec mon
dataset seulement est ce suffisant ou peut etre qu'il ya des propriétes de la
datatable que je rate de ce fait.

Voilà un bout de code :
Sachant que je lance une requête SQL complexe sur une table MaTable avec
jointure

dim MyDataSet ...

dim MyDataTable as DataTable

MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
puisque je récupère une requête, je mets le nom de la table sur laquelle
j'envoie une requête
ou
MyDataTable = MyDataSet.Tables(0) -- crée une erreur

--- celui ci marche parfaitement
dim x as string
x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString

---celui ci retourne un objet à Nothing pour la datatable
x = MyDataTable.Rows(i).Item("NomDuChamp").ToString


Je vous remercie pour votre aide!!


Avatar
Camelia
Ce que je voulais diire c que l'acces aux donnes par le DataSet est possible
alors que l'acces aux donnes par la DataTable est impossible. Le message
d'erreur affiché est

Dim MyDataTable As New DataTable
MyDataTable = MyDataSet.Tables(0) -- erreur ici Can't find table 0
Si j'écris
MyDataTable = MyDataSet.Tables("MaTable")
sFileName = MyDatatable.Rows(i).Item("MonChamp").ToString -- erreur ici
Object reference not set to an instance of an object

Merci pour votre aide!


"Millox Frédéric" a écrit :

Salut Camelia,

Il y a des petites choses que je ne comprends pas dans ce que tu demandes :

1) MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
puisque je récupère une requête, je mets le nom de la table sur laquelle
j'envoie une requête

question : est-ce-que ça marche comme tu le fais là ?
car si oui je ne vois pas trop pourquoi MyDataTable = MyDataSet.Tables(0) te
crée une erreur car obligatoirement ton dataset MyDataSet contient au moins
un datatable.

3) MyDataTable = MyDataSet.Tables(0) te crée une erreur

question : quelle type d'erreur ?

3) MyDataTable = MyDataSet.Tables(0) te crée une erreur alors que tu dis que
x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString marche
parfaitement

Peux tu répondre à ces questions pour que je puisse te faire un début de
réponse ?

A+

--
fmillox


"Camelia" a écrit :

> Bonjour,
>
> J'ai un petit souci avec ma datatable qui reste un objet à Nothing dans mon
> code alors que le dataset est chargé avec les bonnes données. Je ne comprends
> pas pourquoi et je suis de ce fait obligé par exemple de travailler avec mon
> dataset seulement est ce suffisant ou peut etre qu'il ya des propriétes de la
> datatable que je rate de ce fait.
>
> Voilà un bout de code :
> Sachant que je lance une requête SQL complexe sur une table MaTable avec
> jointure
>
> dim MyDataSet ...
>
> dim MyDataTable as DataTable
>
> MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
> puisque je récupère une requête, je mets le nom de la table sur laquelle
> j'envoie une requête
> ou
> MyDataTable = MyDataSet.Tables(0) -- crée une erreur
>
> --- celui ci marche parfaitement
> dim x as string
> x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString
>
> ---celui ci retourne un objet à Nothing pour la datatable
> x = MyDataTable.Rows(i).Item("NomDuChamp").ToString
>
>
> Je vous remercie pour votre aide!!


Avatar
Millox Frédéric
Rebonjour,

ça devient chaud, il y a des trucs que je ne comprends pas.....

tu dis dans ton premier post :

--- celui ci marche parfaitement
dim x as string
x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString

et tu me réponds :

Dim MyDataTable As New DataTable
MyDataTable = MyDataSet.Tables(0) -- erreur ici Can't find table 0

.... Je t'avoue, je suis un peu perdu.....

--
fmillox


"Camelia" a écrit :

Ce que je voulais diire c que l'acces aux donnes par le DataSet est possible
alors que l'acces aux donnes par la DataTable est impossible. Le message
d'erreur affiché est

Dim MyDataTable As New DataTable
MyDataTable = MyDataSet.Tables(0) -- erreur ici Can't find table 0
Si j'écris
MyDataTable = MyDataSet.Tables("MaTable")
sFileName = MyDatatable.Rows(i).Item("MonChamp").ToString -- erreur ici
Object reference not set to an instance of an object

Merci pour votre aide!


"Millox Frédéric" a écrit :

> Salut Camelia,
>
> Il y a des petites choses que je ne comprends pas dans ce que tu demandes :
>
> 1) MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
> puisque je récupère une requête, je mets le nom de la table sur laquelle
> j'envoie une requête
>
> question : est-ce-que ça marche comme tu le fais là ?
> car si oui je ne vois pas trop pourquoi MyDataTable = MyDataSet.Tables(0) te
> crée une erreur car obligatoirement ton dataset MyDataSet contient au moins
> un datatable.
>
> 3) MyDataTable = MyDataSet.Tables(0) te crée une erreur
>
> question : quelle type d'erreur ?
>
> 3) MyDataTable = MyDataSet.Tables(0) te crée une erreur alors que tu dis que
> x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString marche
> parfaitement
>
> Peux tu répondre à ces questions pour que je puisse te faire un début de
> réponse ?
>
> A+
>
> --
> fmillox
>
>
> "Camelia" a écrit :
>
> > Bonjour,
> >
> > J'ai un petit souci avec ma datatable qui reste un objet à Nothing dans mon
> > code alors que le dataset est chargé avec les bonnes données. Je ne comprends
> > pas pourquoi et je suis de ce fait obligé par exemple de travailler avec mon
> > dataset seulement est ce suffisant ou peut etre qu'il ya des propriétes de la
> > datatable que je rate de ce fait.
> >
> > Voilà un bout de code :
> > Sachant que je lance une requête SQL complexe sur une table MaTable avec
> > jointure
> >
> > dim MyDataSet ...
> >
> > dim MyDataTable as DataTable
> >
> > MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
> > puisque je récupère une requête, je mets le nom de la table sur laquelle
> > j'envoie une requête
> > ou
> > MyDataTable = MyDataSet.Tables(0) -- crée une erreur
> >
> > --- celui ci marche parfaitement
> > dim x as string
> > x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString
> >
> > ---celui ci retourne un objet à Nothing pour la datatable
> > x = MyDataTable.Rows(i).Item("NomDuChamp").ToString
> >
> >
> > Je vous remercie pour votre aide!!


Avatar
Camelia
Oui et la différence est que dans le premier cas le dataset marche
parfaitement alors que le datatable Non. Pouvez vous me dire comment écrire
le bout de code si je veux lancer une requête avec jointure.
D'autre part Est ce qu'on peut utiliser un même DataAdapter pour deux
DataTables différentes et en l'occurence pour lire un classeur Excel et deux
feuilles de ce classeur?
Quelle requête mettre dans le DataAdapter.

Merci pour votre aide!



"Millox Frédéric" a écrit :

Rebonjour,

ça devient chaud, il y a des trucs que je ne comprends pas.....

tu dis dans ton premier post :

--- celui ci marche parfaitement
dim x as string
x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString

et tu me réponds :

Dim MyDataTable As New DataTable
MyDataTable = MyDataSet.Tables(0) -- erreur ici Can't find table 0

.... Je t'avoue, je suis un peu perdu.....

--
fmillox


"Camelia" a écrit :

> Ce que je voulais diire c que l'acces aux donnes par le DataSet est possible
> alors que l'acces aux donnes par la DataTable est impossible. Le message
> d'erreur affiché est
>
> Dim MyDataTable As New DataTable
> MyDataTable = MyDataSet.Tables(0) -- erreur ici Can't find table 0
> Si j'écris
> MyDataTable = MyDataSet.Tables("MaTable")
> sFileName = MyDatatable.Rows(i).Item("MonChamp").ToString -- erreur ici
> Object reference not set to an instance of an object
>
> Merci pour votre aide!
>
>
> "Millox Frédéric" a écrit :
>
> > Salut Camelia,
> >
> > Il y a des petites choses que je ne comprends pas dans ce que tu demandes :
> >
> > 1) MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
> > puisque je récupère une requête, je mets le nom de la table sur laquelle
> > j'envoie une requête
> >
> > question : est-ce-que ça marche comme tu le fais là ?
> > car si oui je ne vois pas trop pourquoi MyDataTable = MyDataSet.Tables(0) te
> > crée une erreur car obligatoirement ton dataset MyDataSet contient au moins
> > un datatable.
> >
> > 3) MyDataTable = MyDataSet.Tables(0) te crée une erreur
> >
> > question : quelle type d'erreur ?
> >
> > 3) MyDataTable = MyDataSet.Tables(0) te crée une erreur alors que tu dis que
> > x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString marche
> > parfaitement
> >
> > Peux tu répondre à ces questions pour que je puisse te faire un début de
> > réponse ?
> >
> > A+
> >
> > --
> > fmillox
> >
> >
> > "Camelia" a écrit :
> >
> > > Bonjour,
> > >
> > > J'ai un petit souci avec ma datatable qui reste un objet à Nothing dans mon
> > > code alors que le dataset est chargé avec les bonnes données. Je ne comprends
> > > pas pourquoi et je suis de ce fait obligé par exemple de travailler avec mon
> > > dataset seulement est ce suffisant ou peut etre qu'il ya des propriétes de la
> > > datatable que je rate de ce fait.
> > >
> > > Voilà un bout de code :
> > > Sachant que je lance une requête SQL complexe sur une table MaTable avec
> > > jointure
> > >
> > > dim MyDataSet ...
> > >
> > > dim MyDataTable as DataTable
> > >
> > > MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
> > > puisque je récupère une requête, je mets le nom de la table sur laquelle
> > > j'envoie une requête
> > > ou
> > > MyDataTable = MyDataSet.Tables(0) -- crée une erreur
> > >
> > > --- celui ci marche parfaitement
> > > dim x as string
> > > x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString
> > >
> > > ---celui ci retourne un objet à Nothing pour la datatable
> > > x = MyDataTable.Rows(i).Item("NomDuChamp").ToString
> > >
> > >
> > > Je vous remercie pour votre aide!!


Avatar
Millox Frédéric
Bonjour,

1) Pour revenir à mon dernier post, je t'ai fait un petit exemple :

Dim strConnect, strSql As String
Dim connect As SqlConnection
Dim cmd As SqlCommand
Dim da As SqlDataAdapter
Dim ds As DataSet
Dim dt As DataTable

ds = New DataSet
Try
' strConnect : Chaîne permettant de se connecter à la base de données.
connect = New SqlConnection(strConnect)
connect.Open()

' strSql : Requête sql.
cmd = New SqlCommand(strSql, connect)
cmd.CommandTimeout = 15
cmd.CommandType = CommandType.Text

da = New SqlDataAdapter(cmd)
da.Fill(ds, "MaTable")

da.Dispose()
da = Nothing
cmd.Dispose()
cmd = Nothing

Catch ex As Exception
MessageBox.Show(ex.ToString)
Finally
connect.Close()
connect.Dispose()
connect = Nothing
End Try

Try
Console.WriteLine(ds.Tables("MaTable").Rows(0)("MonChamp").ToString)

Console.WriteLine(ds.Tables(0).Rows(0)("MonChamp").ToString)

dt = ds.Tables("MaTable")
Console.WriteLine(dt.Rows(0)("MonChamp").ToString)
dt.Dispose()

dt = ds.Tables(0)
Console.WriteLine(dt.Rows(0)("MonChamp").ToString)

dt.Dispose()
dt = Nothing
ds.Dispose()
ds = Nothing

Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try

Ce bout de code ne me génére aucune erreur et me retourne le même résultat
dans les 4 cas.
Si mon exemple n'a rien à voir, explique moi un peu mieux ton problème ; je
met un certain temps à comprendre :)

2) De plus dans ton exemple précédent :

Dim MyDataTable As New DataTable
MyDataTable = MyDataSet.Tables(0) -- erreur ici Can't find table 0

le New te sert à rien bien que ça ne soit pas ça qui te génére une erreur...

3) Pouvez vous me dire comment écrire le bout de code si je veux lancer une
requête avec jointure.

select .....
from Table1 inner join Table2 on Table1.ChampJointure1 = Table2.ChampJointure2
where .....

4) D'autre part Est ce qu'on peut utiliser un même DataAdapter pour deux
DataTables différentes et en l'occurence pour lire un classeur Excel et deux
feuilles de ce classeur?

Oui sans problème. Tu fais ta 1ère requête qui remplie ton 1er DataTable
puis tu réinitialises ton SqlDataAdapter avec une nouvelle requête ( un
nouveau SqlDataCommand ) et tu fais ta 2ième requête qui remplie ton 2ième
DataTable.

5) Quelle requête mettre dans le DataAdapter.

Si tu veux croiser des données, utilise la jointure énoncé à la réponse 3

Je ne sais pas si ça t'apporte des réponses, tiens moi au courant.

Cordialement,

fmillox


"Camelia" a écrit :

Oui et la différence est que dans le premier cas le dataset marche
parfaitement alors que le datatable Non. Pouvez vous me dire comment écrire
le bout de code si je veux lancer une requête avec jointure.
D'autre part Est ce qu'on peut utiliser un même DataAdapter pour deux
DataTables différentes et en l'occurence pour lire un classeur Excel et deux
feuilles de ce classeur?
Quelle requête mettre dans le DataAdapter.

Merci pour votre aide!



"Millox Frédéric" a écrit :

> Rebonjour,
>
> ça devient chaud, il y a des trucs que je ne comprends pas.....
>
> tu dis dans ton premier post :
>
> --- celui ci marche parfaitement
> dim x as string
> x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString
>
> et tu me réponds :
>
> Dim MyDataTable As New DataTable
> MyDataTable = MyDataSet.Tables(0) -- erreur ici Can't find table 0
>
> .... Je t'avoue, je suis un peu perdu.....
>
> --
> fmillox
>
>
> "Camelia" a écrit :
>
> > Ce que je voulais diire c que l'acces aux donnes par le DataSet est possible
> > alors que l'acces aux donnes par la DataTable est impossible. Le message
> > d'erreur affiché est
> >
> > Dim MyDataTable As New DataTable
> > MyDataTable = MyDataSet.Tables(0) -- erreur ici Can't find table 0
> > Si j'écris
> > MyDataTable = MyDataSet.Tables("MaTable")
> > sFileName = MyDatatable.Rows(i).Item("MonChamp").ToString -- erreur ici
> > Object reference not set to an instance of an object
> >
> > Merci pour votre aide!
> >
> >
> > "Millox Frédéric" a écrit :
> >
> > > Salut Camelia,
> > >
> > > Il y a des petites choses que je ne comprends pas dans ce que tu demandes :
> > >
> > > 1) MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
> > > puisque je récupère une requête, je mets le nom de la table sur laquelle
> > > j'envoie une requête
> > >
> > > question : est-ce-que ça marche comme tu le fais là ?
> > > car si oui je ne vois pas trop pourquoi MyDataTable = MyDataSet.Tables(0) te
> > > crée une erreur car obligatoirement ton dataset MyDataSet contient au moins
> > > un datatable.
> > >
> > > 3) MyDataTable = MyDataSet.Tables(0) te crée une erreur
> > >
> > > question : quelle type d'erreur ?
> > >
> > > 3) MyDataTable = MyDataSet.Tables(0) te crée une erreur alors que tu dis que
> > > x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString marche
> > > parfaitement
> > >
> > > Peux tu répondre à ces questions pour que je puisse te faire un début de
> > > réponse ?
> > >
> > > A+
> > >
> > > --
> > > fmillox
> > >
> > >
> > > "Camelia" a écrit :
> > >
> > > > Bonjour,
> > > >
> > > > J'ai un petit souci avec ma datatable qui reste un objet à Nothing dans mon
> > > > code alors que le dataset est chargé avec les bonnes données. Je ne comprends
> > > > pas pourquoi et je suis de ce fait obligé par exemple de travailler avec mon
> > > > dataset seulement est ce suffisant ou peut etre qu'il ya des propriétes de la
> > > > datatable que je rate de ce fait.
> > > >
> > > > Voilà un bout de code :
> > > > Sachant que je lance une requête SQL complexe sur une table MaTable avec
> > > > jointure
> > > >
> > > > dim MyDataSet ...
> > > >
> > > > dim MyDataTable as DataTable
> > > >
> > > > MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
> > > > puisque je récupère une requête, je mets le nom de la table sur laquelle
> > > > j'envoie une requête
> > > > ou
> > > > MyDataTable = MyDataSet.Tables(0) -- crée une erreur
> > > >
> > > > --- celui ci marche parfaitement
> > > > dim x as string
> > > > x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString
> > > >
> > > > ---celui ci retourne un objet à Nothing pour la datatable
> > > > x = MyDataTable.Rows(i).Item("NomDuChamp").ToString
> > > >
> > > >
> > > > Je vous remercie pour votre aide!!


Avatar
Patrice
Essaie :
- MyDataSet.Tables.Count pour avoir le nombre de tables dans le dataset.
- MyDataSet.Tables(0).TableName pour avoir le nom de la table.

Je pense que l'erreur se situe ailleurs que dans le code que tu montres (si
DataSet.Tables(0) donne quelque chose DataTableÚtaSet.Tables(0) doit
fonctionner).

--
Patrice

"Camelia" a écrit dans le message de
news:
Bonjour,

J'ai un petit souci avec ma datatable qui reste un objet à Nothing dans


mon
code alors que le dataset est chargé avec les bonnes données. Je ne


comprends
pas pourquoi et je suis de ce fait obligé par exemple de travailler avec


mon
dataset seulement est ce suffisant ou peut etre qu'il ya des propriétes de


la
datatable que je rate de ce fait.

Voilà un bout de code :
Sachant que je lance une requête SQL complexe sur une table MaTable avec
jointure

dim MyDataSet ...

dim MyDataTable as DataTable

MyDataTable = MyDataSet.Tables("MaTable") -- Nom est assez ambigu pour moi
puisque je récupère une requête, je mets le nom de la table sur laquelle
j'envoie une requête
ou
MyDataTable = MyDataSet.Tables(0) -- crée une erreur

--- celui ci marche parfaitement
dim x as string
x = MyDataSet.Tables(0).Rows(i).Item("NomDuChamp").ToString

---celui ci retourne un objet à Nothing pour la datatable
x = MyDataTable.Rows(i).Item("NomDuChamp").ToString


Je vous remercie pour votre aide!!