[.NET] remplir un dataset par un dataadapter et une proc stockée HEEEEEEEEEELPPP

cs_Benouille Messages postés 215 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 7 septembre 2007 - 15 avril 2005 à 17:38
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 - 16 avril 2005 à 11:15
HEEEEEEEEEEEEEEEEEEEELLLLLLLLLLLLLLLLLLLLPPPPPPPPPPP!

salut j'y ai passé ma soirée d'hier et je ne vois toujours pas, si quelqu'un voit pourquoi ça marche pas, je lui voue un culte sans fin pendant au moins 4 minutes d'affillées.

j'essaie de remplir un dataset typé (généré par un dataadpter), en lui passant un paramètre:

je cherche l'adresse d'une personne ici appelée Investisseur.
j'utilise pour ça une proc stockée (adresse_investid qu'elle s'appelle) qui marche tres bien par ailleurs.

voici l'appel qui est tres simple:



Private
Sub LoadAdresse(
ByVal InvestId
As
Integer)

' Recharge les adresses au changement d'investisseur
DsInvest1.Adresse_InvestId.Rows.Clear()

With daAdresse
.SelectCommand.Parameters("@InvestId").Value = InvestId
.Fill(DsInvest1)

' ¤¤¤¤¤ TEST DEBUG A VIRER ¤¤¤¤¤
' Dim Nbloaded As Int16 = .Fill(DsInvest1)
' If Nbloaded = 0 Then MessageBox.Show("Aucune adresse Trouvée pour cet investisseur (" & InvestId.ToString & "): " & CType(Nbloaded, String))
' ¤¤¤¤¤ TEST DEBUG A VIRER ¤¤¤¤¤
End
With

la fonction est tres courte et ne fait rien de particulier:
elle définit le parametre (InvestisseurId)
puis lance le fill pour remplir la table correspondante dans le dataset.

le bleme c'est que il ne ramène rien, 0 ligne.
( testé dans le NbLoaded = .fill puis msgbox dudit nbloadedd (=0)
et je sais qu'il y en a.

si quelqu'un a rencontré ce probleme ou si n'importe qui a n'importe quelle idée ou n'importe quelle question, je suis preneur.

LA OU JE BLOQUE C'EST QUE TOUT PASSE BIEN, MAIS QU'IL NE SE PASSE RIEN!

pour les curieux, voici le code complet de ma form:


Private cmInvest
As CurrencyManager
'pour que tout le monde se base sur l'investisseur (MaJ données en cascade)



Private
Sub TableInvestisseur_Load(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load
LoadData()

End
Sub



Private
Sub LoadData()
'je mets des noms de proc en anglais, c'est dire si je suis au point !
cmInvest = BindingContext(DsInvest1, "Investisseur_Get")

AddHandler cmInvest.PositionChanged,
New EventHandler(
AddressOf InvestChange)
LoadInvest()

End
Sub



Private
Sub LoadInvest()

' vide le dataset, le recharge et envoie la nouvelle position pour adresse et snc
DsInvest1.Investisseur_Get.Rows.Clear()
daInvestisseur.Fill(DsInvest1)

' ¤¤¤¤¤ TEST DEBUG A VIRER ¤¤¤¤¤
' Dim Nbloaded As Int16 = daInvestisseur.Fill(DsInvest1)
' '1088 investisseurs en base normalement
' If Nbloaded <> 1088 Then MessageBox.Show("Nbre d'investisseurs chargés: " & CType(Nbloaded,
string))
' ¤¤¤¤¤ TEST DEBUG A VIRER ¤¤¤¤¤
'InvestChange(Me, Nothing)
End
Sub



Private
Sub InvestChange(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)

If (cmInvest.Position > DsInvest1.Investisseur_Get.Rows.Count)
Then
' Si on est pas dans la plage du currency manager on se pose sur le premier enregistrement
cmInvest.Position = 1

End
If
LoadAdresse(DsInvest1.Investisseur_Get(cmInvest.Position).InvestisseurId)

End
Sub



Private
Sub LoadAdresse(
ByVal InvestId
As
Integer)

' Recharge les adresses au changement d'investisseur
DsInvest1.Adresse_InvestId.Rows.Clear()

With daAdresse
.SelectCommand.Parameters("@InvestId").Value = 4228
' InvestId
.Fill(DsInvest1)

' ¤¤¤¤¤ TEST DEBUG A VIRER ¤¤¤¤¤
' Dim Nbloaded As Int16 = .Fill(DsInvest1)
' If Nbloaded = 0 Then MessageBox.Show("Aucune adresse Trouvée pour cet investisseur (" &
InvestId.ToString & "): " & CType(Nbloaded, String))
' ¤¤¤¤¤ TEST DEBUG A VIRER ¤¤¤¤¤
End
With
End
Sub

et puis je vous mets meme les déclarations utiles
(le data adaptateur et la commande sql du get)


'
'daAdresse
'
Me.daAdresse.DeleteCommand =
Me.SqlAdresse_Del

Me.daAdresse.InsertCommand =
Me.SqlAdresse_Ins

Me.daAdresse.SelectCommand =
Me.SqlAdresse_Get

Me.daAdresse.UpdateCommand =
Me.SqlAdresse_Upd

Me.daAdresse.TableMappings.AddRange(
New System.Data.Common.DataTableMapping() {
New System.Data.Common.DataTableMapping("Table", "Adresse_InvestId",
New System.Data.Common.DataColumnMapping() {
New System.Data.Common.DataColumnMapping("InvestisseurId", "InvestisseurId"),
New System.Data.Common.DataColumnMapping("AdresseId", "AdresseId"),
New System.Data.Common.DataColumnMapping("Ad0", "Ad0"),
New System.Data.Common.DataColumnMapping("Ad1", "Ad1"),
New System.Data.Common.DataColumnMapping("Ad2", "Ad2"),
New System.Data.Common.DataColumnMapping("Ad3", "Ad3"),
New System.Data.Common.DataColumnMapping("CP", "CP"),
New System.Data.Common.DataColumnMapping("Ville", "Ville"),
New System.Data.Common.DataColumnMapping("Pays", "Pays")})})


'
'SqlAdresse_Get
'
Me.SqlAdresse_Get.CommandText = "[Adresse_InvestId]"

Me.SqlAdresse_Get.CommandType = System.Data.CommandType.StoredProcedure

Me.SqlAdresse_Get.Connection =
Me.connSP101

Me.SqlAdresse_Get.Parameters.Add(
New System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue,
False,
CType(0,
Byte),
CType(0,
Byte), "", System.Data.DataRowVersion.Current,
Nothing))

Me.SqlAdresse_Get.Parameters.Add(
New System.Data.SqlClient.SqlParameter("@InvestId", System.Data.SqlDbType.Int, 4))

JE DEVIENS FOU DE PERDRE AUTANT DE CODE POUR UN CODE QUI A L'AIR SI SIMPLE!

vbnouille, desespéré pour ses investisseurs devenus SDF

Benouille la grenouille
A voir également:

1 réponse

cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
16 avril 2005 à 11:15
Salut, pourquoi ne pas utiliser une requette SQL ?
A quoi servent les paramètres ?

look comment je fait :

SQLDataAdapter1.Selectcommand.ComandText="SELECT * FROM toto WHERE Investis=" & MaData.ToString
SQLDataAdapter1.Fill(DataSet11)


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&nbs
0
Rejoignez-nous