17. november 2005 - 12:11Der er
17 kommentarer og 1 løsning
Cannot use a leading TO PRIKKER to exit above the top directory
I ASP kan man bruge
Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("TO PRIKKER/qccdatabases/AppHits.mdb") & ";")
men - har jeg læst - af sikkerhedsmæssige grunde kan man i ASP.NET ikke bruge to prikker. De TO PRIKKER skal læses som to punktummer for at gå to niveauer op, men det forbyder eksperten mig at skrive!
Eksperten har 4 indlæg om dette og angiver to løsningsforslag:
1/ Indsætte en sti i web.config 2/ Bruge @/
men jeg kan ikke få nogen af dem til at virke.
Mit spørgsmål er nu: hvordan skriver man konkret ovennævnte, så det virker i ASP.NET?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Dim StrPath As String = "C:\din\sti\til\database.mdb" Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & StrPath aConn = New OleDbConnection(ConnectionString) aConn.Open()
prøv med Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("/TO PRIKKER/qccdatabases/AppHits.mdb") & ";")
Er det ikke bedst at gå ud fra roden af dit websted og helt droppe ..? Ved at skrive / i starten af din DB sti er du jo i roden. Jeg kender problemet med at skulle skrive en anden sti i forbindelse med en test app. Du kan jo også bare lave en config klasse som du inkluderer som dll. her kan du så evt. ligge begge stier ind, og lave en fancy if sætning der med try catch vælger den ene frem for den anden alt afhængig af hvilken af dem der er hul igennem til. Så længe du tester kan det da spare dig for en del tid.
Nej - på webserveren accepterer den (mærkeligt nok) .., men når jeg kører lokalt får jeg fejlmeldingen. Jeg vil dog gerne køre på den 'rigtige måde' på webserveren og også have det til at virke, når jeg kører lokalt.
Jeg kom lige til at tænke på hvor din app ligger på lokalserveren? Hvis den ligger i iis mappen wwwroot burde det svare til dit webhotel, men hvis den ligger i yderligere en undermappe virker det ikke!
Så er det der problemet opstår.. Når du laver / på din lokalserver hopper den helt ud i roden, og ikke i den mappe din app ligger i. Du kan omgå problemet ved at flytte din database ud af app mappen, og ligge den i wwwroot mappen på din lokale server eks: wwwroot/app/db -> wwwroot/db
Jeg har desværre ikke haft tid til at afprøve det, men har bestemt ikke glemt det, da jeg stadig bruger prikkerne. Bestræber mig på at prøve dit råd i næste uge.
Men for også at få det til at virke på webserveren (hvor både databasebibliotek og app-bibliotek ligger flere niveauer nede), har jeg lavet en lille funktion, der skræller et niveau af Server.Mappath og lagt denne i en class:
Public Shared Function OneLevelUp(ByVal Sti As String) As String
'Der søges først efter '\' fra højre If InStrRev(Sti, "\") > 0 Then Return Mid(Sti, 1, InStrRev(Sti, "\")) Else 'Der søges herefter for '/' fra højre, søgning efter \ fejlede If InStrRev(Sti, "/") > 0 Then Return Mid(Sti, 1, InStrRev(Sti, "/")) End If End If Return "" End Function
Min Dim bliver så:
Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; DATA SOURCE=" & CL.ModSti.OneLevelUp(Server.MapPath("")) & ("DB\Database.mdb"))
og så virker det både lokalt og på webserveren.
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.