Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[ASP] problemen connectie naar Oracle

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb oracle 10g geinstalleerd en dit draait allemaal prima. Nu probeer ik via ASP een connectie op te zetten naar de database, dit heb ik als volgt gedaan:

<%
Session.Contents.Item("boxi") = "server=pcdlz0184;DSN=boxi;UID=robert;PWD=test"
if isEmpty(Session.Contents.Item("Connection")) then
Set Session.Contents.Item("Connection") = Server.CreateObject("ADODB.Connection")
end if
%>

Helaas pakt hij geen connectie op, iemand enig idee waar het fout gaat?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je hebt geen driver of provider in je connectie string opgegeven dus ADO weet niet waarmee hij verbinding moet maken.. zie ook www.connectionstrings.com.

Wat heb je eigenlijk al gedaan om dit probleem zelf op te lossen. Welke keywords heb je gebruikt in Google?

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
ik heb veel gezocht maar zo duidelijk als connectionstrings heb ik et nog niet gevonden, thnx! het script crashed nu niet meer in ieder geval. Ik heb het als volgt aangepakt:
<%
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=pcdlz0184)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=BOXI)));User Id=Robert;Password=test;
%>

Ik hoop dat ik het zo goed doe? Hoe kan ik zo simpel mogelijk testen als de connectie werkt??

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Maak een verbinding en voer daarna een simpele query uit..
Visual Basic:
1
2
3
4
dim dbConn
set dbConn = Server.CreateObject("ADODB.Connection")
dbConn.Open "{connectionstring}"
dbConn.Execute("select 1 + 3 as Result");

Zorg er wel voor dat je nergens in je code iets als 'on error resume next' hebt staan. Als je geen foutmelding krijgt heb je dus een verbinding met je database server. Let op! De execute geeft niet terug (is een sub), maar voert de query wel uit op de database.

Execute gebruik ik vaak voor het uitvoeren van update omdat je dan ook het aantal gewijzigde records terug krijgt. De RecordSet.Update() doet dat niet.

Maar iets meer zelf oplossend vermogen zou geen kwaad kunnen hoor. En hoeveel tijd kost het nou helemaal om even een RecordSet query uit te voeren en even alle records via Response.Write te tonen?

If it isn't broken, fix it until it is..


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 01 april 2008 @ 09:05:
Ik hoop dat ik het zo goed doe? Hoe kan ik zo simpel mogelijk testen als de connectie werkt??
Niet echt. Misschien is het een slim idee om even bij de basics te beginnen?
Niemand_Anders schreef op dinsdag 01 april 2008 @ 10:12:
Maak een verbinding en voer daarna een simpele query uit..
Visual Basic:
1
2
3
4
dim dbConn
set dbConn = Server.CreateObject("ADODB.Connection")
dbConn.Open "{connectionstring}"
dbConn.Execute("select 1 + 3 as Result");

Zorg er wel voor dat je nergens in je code iets als 'on error resume next' hebt staan. Als je geen foutmelding krijgt heb je dus een verbinding met je database server. Let op! De execute geeft niet terug (is een sub), maar voert de query wel uit op de database.
ASP:
1
Set MyResult = dbConn.Execute("Select blah from foo where bar = something")

Dan geeft Execute wel degelijk een resultset terug:
Return Value

Returns a Recordset Object (ADO) object reference.

Remarks

Using the Execute method on a Connection Object (ADO) object executes whatever query you pass to the method in the CommandText argument on the specified connection. If the CommandText argument specifies a row-returning query, any results that the execution generates are stored in a new Recordset object. If the command is not intended to return results (for example, an SQL UPDATE query) the provider returns Nothing as long as the option adExecuteNoRecords is specified; otherwise Execute returns a closed Recordset.

The returned Recordset object is always a read-only, forward-only cursor. If you need a Recordset object with more functionality, first create a Recordset object with the desired property settings, then use the Recordset object's Open Method (ADO Recordset) method to execute the query and return the desired cursor type.

[ Voor 92% gewijzigd door RobIII op 01-04-2008 10:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je hebt gelijk RobIII. Ik moet ook eerlijk bekennen dat ik sinds 2002 niet meer in ASP heb geprogrammeerd.

Wij gebruikte meestal RecordSet.Open omdat je dan de cursor location kunt opgeven (adUseClient) terwijl als je Connection.Open gebruik je de standaard adUseServer gebruikt waarmee je de kans loopt dat je recordset ineens 'lege' resultaten terug geeft omdat de database server de verbinding heeft verbroken. Erg irritant.

If it isn't broken, fix it until it is..


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Niemand_Anders schreef op dinsdag 01 april 2008 @ 13:54:


Wij gebruikte meestal RecordSet.Open omdat je dan de cursor location kunt opgeven (adUseClient) terwijl als je Connection.Open gebruik je de standaard adUseServer gebruikt waarmee je de kans loopt dat je recordset ineens 'lege' resultaten terug geeft omdat de database server de verbinding heeft verbroken. Erg irritant.
Ehm, 1 tip. Wen maar aan dit soort irritante dingen, ga er niet omheen werken, maar los ze op. Een dbase server verbreekt niet zomaar de verbinding, hier is altijd een aanleiding voor ( timeout, error values received / etc . )

Met jullie werkwijze blijf je het probleem houden, sterker nog je vergroot de kans op problemen, want nu kan je problemen client en serverside krijgen... ( serverside heb je al iets wat niet naar zin werkt, client-side hoeft er alleen nog maar bij te komen ).

Kijk ik kan best begrijpen dat je een andere methode kiest omdat je server timeouts te laag zijn, en deze niet verhoogd kunnen worden. Maar ik kan niet begrijpen dat iemand een andere methode kiest omdat hij soms "lege" resultaten krijgt als de server de verbinding verbroken heeft.
Verbreekt de server soms de verbinding, los dit dan op en ga kijken of je wel verbonden bent met de server voordat je er iets heenstuurt ( zowieso standaard aan te raden, kost in een standaard desktop app 0,002% performance maar voorkomt een hoop rare dingen als mensen later besluiten op wifi over te gaan en dan opeens losses gaan krijgen )

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 25-10 14:28
Niemand_Anders schreef op dinsdag 01 april 2008 @ 10:12:
Maak een verbinding en voer daarna een simpele query uit..
Visual Basic:
1
2
3
4
dim dbConn
set dbConn = Server.CreateObject("ADODB.Connection")
dbConn.Open "{connectionstring}"
dbConn.Execute("select 1 + 3 as Result from dual");
Oracle heeft beslist een stukje from nodig, dus from dual toevoegen.
(Beetje vervelend wanneer TS denkt dat zijn connectie niet werkt wanneer de query niet goed is)

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Gomez12 schreef op woensdag 02 april 2008 @ 22:09:
[...]
Met jullie werkwijze blijf je het probleem houden, sterker nog je vergroot de kans op problemen, want nu kan je problemen client en serverside krijgen... ( serverside heb je al iets wat niet naar zin werkt, client-side hoeft er alleen nog maar bij te komen ).
Voor de duidelijkheid: Client is hier de webserver. Bij adUseClient worden alle records naar de ado CLIENT gehaalt. Gebruik je adUseServer, dan blijven de records op de (database) server en bij elke MoveNext wordt er een record opgehaald. Door adUseClient blijven de verbindingen naar de database server beperkt openstaan.

SQL Server 7 sloot namelijk zogenaamde cursor verbindingen als de pool leeg was. Echter ADO weet dat de server 200 records zou moeten teruggeven en als jij bij record 175 bent, krijg je daarna dus 25 'lege' records en geen foutmelding.

If it isn't broken, fix it until it is..

Pagina: 1