Toon posts:

[asp.net & mssql] datarelation met stored procedure

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem met het maken van een datarelatie in asp.net. Ik heb ook andere pagina's waarin ik dit doe, deze doen het wel goed, maar om de een of andere reden doet de laatste pagina het niet goed waardoor ik me al lange tijd blind aan het staren ben op deze paar regels code.

Dit is mijn code in vb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
'Set SQL Stored Procedure name...
        mSqlString = "exec klantGetKennis "                  '<---------- Stored Proc Name  
        mSqlString = mSqlString & klantIdParent.Text           '  ...and parameter = current parent record Id in hidden field...
        ds = New DataSet
        dv = New DataView


        'Get connection string from Web.Config
        mConnString = ConfigurationSettings.AppSettings("dbConnStr")
        
        cn = New SqlConnection
        cn.ConnectionString = mConnString
        
    'Open connection, get data set:
        cn.Open()
        adap = New SqlDataAdapter(mSqlString, cn)
        adap.Fill(ds, "dsMyDataKennis")

        'tabel opgeven in de dataset
        ds.Tables(0).TableName = "kennisverzekering"
        ds.Tables(1).TableName = "medewerker"
        ds.Tables(2).TableName = "kennisverzekering_registratie"

        'kolom defineren voor relaties
        dc1 = ds.Tables("kennisverzekering").Columns("kennisverzekering_id")
        dc2 = ds.Tables("medewerker").Columns("kennisverzekering_registratie_kennisverzekering_id")
        dc3 = ds.Tables("kennisverzekering_registratie").Columns("kennisverzekering_registratie_kennisverzekering_id")

        'create the relations for the data: Relation Parent => Child - kennis => registratie
        dr1 = New DataRelation("kennisRegistratie", dc1, dc2, False)
        dr2 = New DataRelation("kennisUren", dc1, dc3, False)

        ds.Relations.Add(dr1)
        ds.Relations.Add(dr2)

        dv = ds.Tables("kennisverzekering").DefaultView

        If Not cn Is Nothing Then cn.Close()

        hgKennis.DataSource = dv
        hgKennis.DataBind()


De stored procedure:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
CREATE PROCEDURE [florens].[klantGetKennis ] 

        @KlantIdIn   int     

AS


/* haal kennisgegevens */
Select
    
    kennis.kennisverzekering_id     ,
    kennis.kennisverzekering_naam   ,
    kennis.kennisverzekering_begin_datum,
    kennis.kennisverzekering_eind_datum ,
    kennis.kennisverzekering_contracturen,
    kennis.kennisverzekering_uurtarief  

From
    kennisverzekering as    kennis

Where
    kennis.kennisverzekering_klant_id       = @KlantIdIn


/* haal registratie en medewerkers. Deze kunnen dan in de ADO dataset een relatie krijgen   ,*/
Select
    reg.kennisverzekering_registratie_id    ,
    reg.kennisverzekering_registratie_kennisverzekering_id,
    reg.kennisverzekering_registratie_datum ,
    reg.kennisverzekering_registratie_uren  ,
    reg.kennisverzekering_registratie_omschrijving,
    reg.kennisverzekering_registratie_onsite    ,
    medewerker.medewerker_naam      

From
    kennisverzekering_registratie   as  reg

Inner join
    kennisverzekering on  reg.kennisverzekering_registratie_kennisverzekering_id = kennisverzekering.kennisverzekering_id

Inner join
    medewerker on  reg.kennisverzekering_registratie_medewerker_id = medewerker.medewerker_id


/* haal het totaal van de uren */
Select
    sum(registratie.kennisverzekering_registratie_uren) as som_uren,
    registratie.kennisverzekering_registratie_kennisverzekering_id 

From
    kennisverzekering_registratie as registratie

Group by
    registratie.kennisverzekering_registratie_kennisverzekering_id
GO


De grid op de pagina is redelijk standaard, alle veldjes komen er op terug en de datakeyfield is: kennisverzekering_id .

Ik wil bereiken dat ik van iedere klant alle registraties zie, en ook een totaal van alle uren die geregistreerd zijn.

De foutmelding die ik krijg is:
 field or property with the name 'som_uren' was not found on the selected datasource. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: A field or property with the name 'som_uren' was not found on the selected datasource.

Source Error: 


Line 139:
Line 140:        hgKennis.DataSource = dv
Line 141:        hgKennis.DataBind()
Line 142:        MyGridDataGetKennis = True
Line 143:    End Function
 

Source File: bla\grids\kennisverzekering.ascx.vb    Line: 141 

Stack Trace: 


[HttpException (0x80004005): A field or property with the name 'som_uren' was not found on the selected datasource.]
   System.Web.UI.WebControls.BoundColumn.OnDataBindColumn(Object sender, EventArgs e) +349
   System.Web.UI.Control.OnDataBinding(EventArgs e) +66
   System.Web.UI.Control.DataBind() +26
   System.Web.UI.Control.DataBind() +86
   System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem, DataGridColumn[] columns, TableRowCollection rows, PagedDataSource pagedDataSource) +169
   System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource) +1408
   System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) +49
   System.Web.UI.WebControls.BaseDataList.DataBind() +23
   backoffice.kennisverzekering.MyGridDataGetKennis() in bla\grids\kennisverzekering.ascx.vb:141
   backoffice.kennisverzekering.Page_Load(Object sender, EventArgs e) in bla\grids\kennisverzekering.ascx.vb:32
   System.Web.UI.Control.OnLoad(EventArgs e) +67
   System.Web.UI.Control.LoadRecursive() +35
   System.Web.UI.Control.AddedControl(Control control, Int32 index) +307
   System.Web.UI.ControlCollection.Add(Control child) +153
   backoffice.navbar.setPlaceHolder(String keuze) in bla\gui\navbar.ascx.vb:145
   backoffice.navbar.onButtonClick(Object sender, EventArgs e) in bla\gui\navbar.ascx.vb:212
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1277

 


Een beetje veel tekst, maar ik hoop dat het duidelijk is. HOpelijk kan iemand mij in de richting wijzen want ik begin hier echt flink hoofdpijn te krijgen.

Oh ja, als ik andere velden in de laatste select van de storedprocedure zet, en de som weghaal (dus een gewone select), dan doet ie dat ook niet.

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:15
Je stored procedure haalt 3 result-sets op.
Daardoor heb je 3 datatables in je dataset; maar dat wist je wel.

Echter, je bind je datagrid aan de 'kennisverzekering' tabel die in je dataset zit, en dat is de eerste tabel in je dataset.
Je som_uren veld zit in de 3de resultset....

* whoami mompelt tussen zijn tanden ook nog iets over parameters.

[ Voor 12% gewijzigd door whoami op 25-05-2005 11:23 ]

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
idd maak eens gebruik van Parameters en zet ook je command op Stored procedure je hoeft dan ook niet in je Querystring "Exec" neer te zetten. Enkel de naam van de sp is dan voldoende.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
Is er een reden dat werken met parameters en het command op stored procedure zetten beter is?
Ik had namelijk het idee dat het niet zoveel uitmaakte, maar goed, ik kan er natuurlijk naast zitten :) .

Ik begrijp nu eigenlijk ook wel dat het op de huidige manier niet gaat werken... maar heb je toevallig een link bij de hand naar een pagina die mij uitlegt hoe ik meerdere tabellen in een dataview krijg (of meerdere dataviews aan een datagrid)? Alles wat ik met google vind doet het ongeveer gelijk als ik, en blijkt dan door de relatie toch alles te zien te krijgen. Opzich logisch, daar is de relatie toch voor?

[ Voor 15% gewijzigd door Verwijderd op 25-05-2005 12:15 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:26

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op woensdag 25 mei 2005 @ 11:52:
Is er een reden dat werken met parameters en het command op stored procedure zetten beter is?
Ik had namelijk het idee dat het niet zoveel uitmaakte, maar goed, ik kan er natuurlijk naast zitten :) .
Performance + security

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:15
Ik denk dat dit eigenlijk bij het aanroepen van een SP niet zoveel uitmaakt (die performance & security dan).
Bij een embedded query is dat natuurlijk weer anders.

Echter, parameters icm procedures hebben toch nog altijd hun voordeel/bestaansrecht. (Denk aan datums als parameters doorgeven naar een SP).

https://fgheysels.github.io/


Verwijderd

Topicstarter
Okee, ik begrijp dat het dus eigenlijk niet zo heel veel uitmaakt in deze situatie, maar dat het gewoon netter is. Dan zal ik het maar eens gaan omzetten, zal m'n baas blij maken. :)

Verder heb ik het relatie probleem opgelost. Door m'n sql iets aan te passen was het gewoon niet meer nodig. (vind ik persoonlijk altijd een van de mooiere oplossingen).
Pagina: 1