[C#/ASP] out/ref functies aanroepen vanuit ASP

Pagina: 1
Acties:

  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 27-08 08:10
Ik heb een COM component in C# geschreven welke een recordset moet vullen voor de ASP client. Nu krijg ik het toch niet voor mekaar om een recordset out (dus byvalue) door te geven. Hoe doe ik da?

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
public bool GetPersonData2(out Recordset rcsData, int intId)
{
    Persons prsPerson = new Persons();
    DataTable dtblPrsDat = new DataTable();         
    
    try
    {
        // Set prim key prop
        prsPerson.Id = (SqlInt32)intId;
        // Fetch data based upon prim key prop
        dtblPrsDat = prsPerson.SelectOne();
        // Check if person exist by checking result from sproc
        if (dtblPrsDat.Rows.Count < 1)
            throw new Exception("Persoon niet gevonden");
            // Wrap our DataTable object in a recordset and pass back to caller
        rcsData = ((ADODB.Recordset)Wrapper.CreateADODBRecordSet(dtblPrsDat)).Clone(ADODB.LockTypeEnum.adLockOptimistic);
        return true;
    }
    catch (Exception exError)
    {
        throw new Exception("Oce.DTB.BLL::GetPersonData::Error occured. " + exError.Message);
    }           
}


private void Button2_Click(object sender, System.EventArgs e)
{
    ADODB.Recordset rcs = new ADODB.Recordset();
    Oce.DTB.BLL.PersonsManager obj = new Oce.DTB.BLL.PersonsManager();          
    obj.GetPersonData2(out rcs, 13);            
    Page.Response.Write((string)rcs.Fields["firstname"].Value);
        
}


En dan de aanroep in ASP

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<%
Dim objPrsMng
Dim rcsPrsDat

Set objPrsMng = Server.CreateObject("Oce.DTB.BLL.PersonsManager")
Set rcsPrsDat = Server.CreateObject("ADODB.Recordset")
test = objPrsMng.GetPersonData2(rcsPrsDat, 13)

  Response.Write Cstr(rcsPrsDat.Fields("firstname").Value)

Set rcsPrsDat = Nothing
Set objPrsMng = Nothing
%>


Bovenstaande code voor .NET werkt... haalt in beide gevallen (ref/out) het juiste record op, maar in ASP krijg ik het niet voor mekaar.

Error Type:
Microsoft VBScript runtime (0x800A0005)
Invalid procedure call or argument: 'GetPersonData2'
/dtb/db_GetPersonData.asp, line 7

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Denk dat je regel voor regel moet gaan debuggen (bv commenten), het zit het hem zelfs in de aanroep: anders kreeg je wel een error van die try...catch.

oogjes open, snaveltjes dicht


Verwijderd

Waarom return je die recordset niet gewoon? Die boolean om te testen of de operatie is geslaagd kun je overbodig maken (is in jouw code al overbodig :) ) door het gebruik van exceptions (of kun je deze niet afvangen is ASP?).

Wat je misschien nog kunt proberen is de VarPtr functies e.d. te gebruiken voor die recordset.

  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 27-08 08:10
Het gaat er meer om dat dit vanuit .NET, dus vanuit een winapp byvalue gebruiken in de aanroep, maar vanuit APS naar .NET niet.

De code hier is maar test code, de exception handling is dus niet van belang.