15. august 2010 - 14:30Der er
12 kommentarer og 1 løsning
MS Access på en aspx side
Jeg har en aspx side med tilgang til en MS access. Den er indlejret i en Sub Page_Load Jeg ønsker den direkte på aspx siden - altså uden Sub Page_Load. Kan i hjælpe på hvordan den skal være Dimet?
<script language="VB" runat="server" > Sub Page_Load(sender As Object, e As EventArgs) <----- Skal væk Dim MyConnection As New OleDbConnection() MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Besog.mdb" Dim strSQL As String = "INSERT INTO Besogende (REMOTE_HOST,Dato) VALUES('" & request.ServerVariables("REMOTE_HOST") & "','" & now() & "')" Dim objCommand As New OleDbCommand(strSQL, MyConnection) MyConnection.Open() objCommand.ExecuteNonQuery() MyConnection.Close() End Sub <----- Skal væk </script>
Fordi tilgang til DB skal være uafhængig af siden lodes ind.
Nu ved jeg af mange mange års erfaring det næste spørgsmål er hvorfor det .... efter en længere debat glider mit spørgsmål i baggrunden til en diskution der ikke hjælper mig.
Skulle jeg virkelig forklare det i dybten vil det fylde 10 sider om hele programmets struktur der er meget kompleks hvor der er interaktion mellem mange sider og programmer.
Jeg glemte - hvis det ikke kan lade sig gøre vil det hjælpe mig kolosalt for så kan jeg agere herudfra - kan det lade sig gøre så venligst hjælp med at sætte de rigtige Dim
Så vil jeg friste mig selv til at sige at du skal sætte dig lidt mere ind i ASP.NET - der vil altid køre en eller flere events når din side loades, oftest er page_load den rigtige event at håndtere sådanne ting i. Hvis ingen events køres er der ingen kald til siden og så er der slet ikke behov for at eksekvere kode.
Hvis din tilgang til DB skal være uafhængig af at siden loades ind har du et større problem eftersom web er stateless og ikke uden videre kan gemme connections på tværs af sider - skal kode eksekveres mere globalt eller ikke-side-afhængig skal du i stedet have fat på nogle events et helt andet sted, fx i din global.asax.
Hvis du ikke kommer med oplysninger om problemets størrelse er det umuligt at komme med en løsning.
Når jeg tilgår siden skal DB kun aktiveres under bestemte forhold, nemlig når min variable Session("Gennemgang")="" . Den har jeg lagt i en if .. then. Som her vist:
<% If Session("Gennemgang")="" then %> ....... ....... <% end if %>
Herindeni virker load eventen ikke - derfor vil jeg have den væk og evt. erstattet af en anden der kan passe ind i if setningen.
Det er fordi if-sætningen skal foregå inden i eventen;
<script language="VB" runat="server" > Sub Page_Load(sender As Object, e As EventArgs) If Session("Gennemgang")="" then Dim MyConnection As New OleDbConnection() MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Besog.mdb" Dim strSQL As String = "INSERT INTO Besogende (REMOTE_HOST,Dato) VALUES('" & request.ServerVariables("REMOTE_HOST") & "','" & now() & "')" Dim objCommand As New OleDbCommand(strSQL, MyConnection) MyConnection.Open() objCommand.ExecuteNonQuery() MyConnection.Close() End If End Sub </script>
Uden at kende din kode vil det formentlig også være relevant at tjekke for om din session er null.
Tak for forslaget. Desværre havde jeg prøvet det som helt naturligt men det virkede ikke. For at være helt sikker på session har jeg prøvet med If Session("Gennemgang")<>"Nej". Det virker heller ikke. Så vidt jeg kan se slår Sub Page Session "ihjel" det var derfor jeg ville have den ud.
Der er ingenting udover timeout, nedbrud eller bevidst kode der kan slå en session ihjel - en ekstrem mængde af alle de webapplikationer, der er lavet i .NET ville slet ikke fungere i dag hvis din påstand var korrekt. Der må altså flere informationer på bordet - eller også må du i gang med at debugge gennem Visual Studio.
<script language="VB" runat="server" > Sub Page_Load(sender As Object, e As EventArgs) If Session("Gennemgang")<>"Nej" then Dim MyConnection As New OleDbConnection() MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Besog.mdb" Dim strSQL As String = "INSERT INTO Besogende (REMOTE_HOST,Dato) VALUES('" & request.ServerVariables("REMOTE_HOST") & "','" & now() & "')" Dim objCommand As New OleDbCommand(strSQL, MyConnection) MyConnection.Open() objCommand.ExecuteNonQuery() MyConnection.Close()
Så virker det - tak for hjælpen. Session skal sættes i Page_Load. Herudover har du ret, jeg er gået fra ASP til ASPX som jeg har købt MS Expression til inclusive Expression Web, Blend, Designer, Encoder. Mit livs dårligste investering. Der er f.eks. ingen Basic i Expression WEB!. MS vil have 2000 kr for at hjælpe med at finde det! Og så har jeg endda købt hele pakken - utroligt!.
Foriøvrigt hvad kan Visual Studio 2010 som Expression web ikke kan? Skulle jeg hellere smide møgprogrammerne Expression ud og erstatte dem med Visual Studio? Jeg laver primært web sider i ASPX.
Jeg har intet kendskab til Expression så kender ikke forskellen - men du kan jo starte med at hente Visual Studio Express hvilket er ganske gratis.
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.