30. maj 2000 - 13:13Der er
6 kommentarer og 1 løsning
Recordset fra Java til ASP side
Hej
Jeg har lavet et COM object i Java som sørger for at udføre en simpel søgning, problemet er resultatet skal vises i en ASP side.
Laver jeg det i ren Java virker det fint hvis jeg bruger Fields objectet (com.ms.wfc.data.Fields), men det er som om field delen ikke kommer med recordsettet.
Er der et eller andet hemmeligt Microsoft trick jeg ikke kender i ADO?
hvis du returnerer et ADODB.Recordset fra dit COM objekt til din ASP side så skal du huske at du IKKE må lukke dit recordset i dit COM objekt.
Du bør også være opmærksom på at det ikke er smart at returnere et recordset da objektet er instancieret i dit eget COM objekt og at du derfor holder det åbent mens du bruger recordsettet på ASP siden.
For hastighed optimering (enorm!) så returner et array istedet: myrecordset.GetRows()
.fields er iøvrigt default property på recordset og du behøver derfor kun på din ASP side (VB script right?) at bruge myrecordset("myfield") for at tilgå et field.
public Recordset Search(String searchArgument) { result = new Recordset(); command.setCommandText("SELECT word FROM searchIndex WHERE word = '" + searchArgument + "'"); result.setCursorLocation(AdoEnums.CursorLocation.CLIENT); result.setCursorType(AdoEnums.CursorType.FORWARDONLY); result.setLockType(AdoEnums.LockType.BATCHOPTIMISTIC); result.open(command); return result; }
... og på ASP siden gør jeg følgende:
set result = searchEngine.search("test")
if result.EOF then Response.Write "Nothing found" else while not result.EOF Response.Write "<BR>" & result.Fields("word") result.moveNext wEnd end if
... hvilket giver følgende fejl i den linie hvor jeg udskriver rescordsettet:
Microsoft VBScript runtime error '800a01c2'
Wrong number of arguments or invalid property assignment: 'Fields'
asp siden: set result = searchEngine.search("test") If isnull(result) then Response.Write "Nothing found" else for n=0 to ubound(result,2) Response.Write "<BR>" & result (n,1) next end if ------------ Det virker - hvis du insiterer på at bruge et recordset på asp siden så check dine COM-options el.l. for du kan så IKKE bruge JIT optimering osv - da objektet skal holdes persistent og desuden skal result i objektet være globalt og public...
Jeg SKAL bruge et recordset, så jeg kan desværre ikke bruge getRows().
Jeg syntes også det er lidt mystisk at jeg kan udkommentere linien som udskriver indholdet, og så kører den hele recordsettet igennem uden fejl. Så det er som om det er noget med Field-delen der går galt.
Hvordan kan jeg kontrollere om den bruger JIT eller ej?
Jeg har aldrig prøvet at lave COM komponenter i Java så jeg ved ikke hvordan du sætter diverse options der, men der må være nogle properties du kan sætte.
Når du registrerer din komponent så kan du også sætte nogle options. Hvis du bruger Windows NT så i MTS, og i Windows 2000 (Component Services) (check properties på din Package)
Jeg har brugt det engang for over et år siden (det med at returnere recordset så jeg er ikke helt frisk på området) men det gav meget lav performance og kan låse hele din COM komponent (selvom du tror den er multi/apartment threaded) - så overvej lige igen om du er sikker på at du ikke kan bruge et array...
oops bare en kommentar... Jeg skrev Set result = .... result (på asp siden) skal jo ikke Set'es da det ikke er et objekt men derimod et array :) ellers så skulle den være der :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.