webForumDet fria alternativet

stänga

.NETur .NET

13 svar · 310 visningar · startad av renholm

Medlem sedan apr. 20012 266 inlägg
Frågan#1

hur gör jag för att stänga t.ex. ett ADODB objekt?

i "gammla" ASP gjorde man ju såhär:

Set dbConn = Nothing

hur gör jag samma sak fast i ASP.NET(C#)

------------------
kristoffer renholm | http://www.renholm.com

Medlem sedan dec. 2000399 inlägg
#2

Hej!

Minneshanteringen fungerar lite annorlunda .NET jämfört med ASP. Kika lite här.

Kolla denna sida också(mer relevant tror jag): http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconprogrammingessentialsforgarbagecollection.asp

------------------
mvh André

[Redigerat av juventus1 den 31 jan 2002]

Medlem sedan apr. 20012 266 inlägg
#3

tack för url... men blev inte så mycke klokare för de... får detta fel meddelande när jag försöker "stänga" mitt Dataset objekt:

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1540: Cannot access protected member 'object.~Object()' via a qualifier of type 'DataSet'; the qualifier must be of type 'nav_aspx' (or derived from it)

Source Error:

Line 30:   Response.Write("\n</body>\n</html>");
Line 31: 
Line 32: ds.Finalize();
Line 33: %>

Min kod ser ut så här:

<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%
string strDbCon = "Provider=SQLOLEDB;Server=(local);Database=webshop;Uid=sa;Pwd=***;";

DataSet ds = new DataSet();
OleDbDataAdapter oleQuery = new OleDbDataAdapter("Select * from category", strDbCon);
oleQuery.Fill(ds, "Table");
DataTable dt = ds.Tables["Table"];

%>

<html>
<head>
<title>nav.aspx</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<%	

foreach (DataRow dr in dt.Rows) {
  if (Request.QueryString["p"] == dr["intParent"]) {
    Response.Write("-");
  }
  Response.Write("<a href='nav.aspx?p=" + dr["catid"] + "'>" + dr["strCatName"] + "</a><br>\n");
}

  Response.Write("\n</body>\n</html>");

ds.Finalize();
%>

------------------
kristoffer renholm | http://www.renholm.com

Medlem sedan maj 2001329 inlägg
#4

Hi.

Du behöver aldrig stänga ett DataSet i .Net. DataSetet kopierar helt enkelt över alla raderna ifrån databasen och håller alla dessa i minnet, till skillnad från gamla ADO.

När du sedan trillar ut ur det block där du definierade DataSetet kommer GC att automatiskt ta hand om ditt objekt, i detta fall ditt dataset.

Däremot måste du öppna och stänga en connection om du använder dig av DataReader, vilken liknar gamla ADO lite mer.

Bara en liten övrig kommentar. I .Net ska du aldrig blanda kod med design. Fyll istället ex. en Repeater med ditt dataset och ha en LinkButton i denna repeater. För exempel på sådant, kolla igenom Quickstarten.
http://samples.gotdotnet.com/quickstart/Default.aspx

//lite snabbt, ska äta

------------------
//Grynet

Medlem sedan juni 20011 732 inlägg
#5

Precis. Antingen har du två helt skilda dokument (ett med c#-koden och ett med design-koden, inkl asp.net, sk codebehind) eller så strukturerar du åtminstone upp sidan så här:

----------------
all c#-kod
----------------
<html>
...din sida...
</html>
----------------

Dessutom ska du naturligtvis använda asp.net! Exempelvis, istället för detta:

Response.Write("<a href='nav.aspx?p=" + dr["catid"] + "'>" + dr["strCatName"] + "</a><br>\n");

...så ska du naturligtvis använda asp.net-taggar (annars förlorar du ju halva poängen med .net), exempelvis:

<asp:HyperLink id="myHyperlink" runat="server" />

//där du sedan sätter dess parametrar i din c#-kod, exempelvis:

string myString = "se";
myHyperlink.NavigateUrl = "http://www.minsida.com/default.aspx?language=" + myString;

Du ska i princip aldrig använda Response.Write annat än om du vill skriva ut data när du testar olika grejjer. Till allt som ska vara dynamiskt använder du asp.net-taggar, exempelvis <asp:Button...> <asp:ImageButton...> <asp:Label...> <asp:DropDownList...> osv. I början kan det vara lite krångligt och förvirrande med alla nya taggar men när du fått grepp om den så kommer du få igen det MÅNGA gånger!

------------------
Jag kan inte komma på någon signatur.

[Redigerat av NETwork den 31 jan 2002]

Medlem sedan apr. 20012 266 inlägg
#6

Bara en liten övrig kommentar. I .Net ska du aldrig blanda kod med design. Fyll istället ex. en Repeater med ditt dataset och ha en LinkButton i denna repeater. För exempel på sådant, kolla igenom Quickstarten. http://samples.gotdotnet.com/quickstart/Default.aspx

jo.. vet att man ska helst använda Repeater... men då kan jag inte få de funkationer som jag ska ha i min webshop meny... dvs.. med undermenyer osv.. efterrsom man inte kan lägga en repeater i en annan... iaf funkade de inte när jag försökte... men tack för hjälpen

men funkar de bra om jag kör c# koden i en <script></script> i början av documentet som de har gjort på t.ex http://samples.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/customize/datalist1.src&file=CS\DataList1.aspx&font=3 ?

------------------
kristoffer renholm | http://www.renholm.com

[Redigerat av renholm den 31 jan 2002]

Medlem sedan apr. 20012 266 inlägg
#7

Hej igen!

Har nu fixat en repeater... bättre så här?:

<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<html>
<head>
<title>nav.aspx</title>

<script language="C#" runat="server">

        void Page_Load(Object sender, EventArgs e ) {

	string strDbCon = "Provider=SQLOLEDB;Server=(local);Database=webshop;Uid=sa;Pwd=***;";

	OleDbDataAdapter oleQuery = new OleDbDataAdapter("Select * from category", strDbCon);
	DataSet ds = new DataSet();
	oleQuery.Fill(ds, "Table");

        navRe.DataSource = ds.Tables["Table"].DefaultView;
        navRe.DataBind();

	}
</script>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">

  <ASP:Repeater id="navRe" runat="server">
      <HeaderTemplate>
        <table width="120" style="font: 8pt verdana">
      </HeaderTemplate>
      <ItemTemplate>
        <tr style="background-color:FFECD8">
          <td>
            +
          </td>
          <td>
            <%# DataBinder.Eval(Container.DataItem, "strCatName") %>
          </td>
        </tr>
      </ItemTemplate>
      <FooterTemplate>
        </table>
      </FooterTemplate>
  </ASP:Repeater>

</body>
</html>

------------------
kristoffer renholm | http://www.renholm.com

[Redigerat av renholm den 31 jan 2002]

Medlem sedan juni 20011 732 inlägg
#8

Jodå, du kan visst ha en repeater i en repeater i en repeater...

Tro mig, du kan göra ALLT med asp.net som du kan göra på det gamla sättet, plus en hel del annat också. Om du "tror" att det inte går, så är det snarare så att du inte har lärt dig hur man gör. :)

Du får använda findcontrols för att hitta en control i en control.

------------------
Jag kan inte komma på någon signatur.

...och ja, nu ser det betydligt trevligare ut! Visst kan du lägga koden högst upp, men ska du vara riktigt seriös så skapar du ett eget .cs-dokument för din c#-kod, men så länge du jobbar själv och inte behöver/vill kompilera koden så är det väl inte så viktigt. Kan vara bra att lära sig dock, exempelvis om du skapar en egen klass med funktioner som du ofta använder till alla dina sidor. Kompilera, lägg dll-filen i din binkatalog, sen kan du enkelt anropa klassen från alla dina aspx-sidor!

[Redigerat av NETwork den 31 jan 2002]

Medlem sedan apr. 20012 266 inlägg
#9

jo märkte att de funkade med en repeater i en annan.. de var med DataGrid jag hade haft problem med...

finns de någon fördel att lägga de i en .cs fil? annars så tar jag en sak i taget :)

------------------
kristoffer renholm | http://www.renholm.com

Medlem sedan juni 20011 732 inlägg
#10

Njäe, skit i cs-filerna så länge, det är nog rätt onödigt för den som snickrar på hemsidan... det är som sagt framför allt om du vill kompilera koden och skapa dll-filer som du måste använda det (observera att sidan kompileras även när du gör på ditt sätt, första gången när du kliver in på sidan så kompileras den och ligger sedan på serverns ramminne! Till skillnad från gamla asp, som ju intepreteras varje gång någon besöker sidan...).

------------------
Jag kan inte komma på någon signatur.

Medlem sedan apr. 20012 266 inlägg
#11

.cs filerna fungerar alltså som t.ex COM komponenter i gammla ASP... ?

------------------
kristoffer renholm | www.renholm.com

PS. se till att få lite folk till #webeye på quakenet.org så kan vi snacka ASP.NET där .DS

[Redigerat av renholm den 31 jan 2002]

Medlem sedan juni 20011 732 inlägg
#12

Ja, det kan man väl säga... även om det naturligtvis finns skillnader. Det finns säkert någon som kan förklara det bättre än jag. En av de viktigaste skillnaderna med hela asp.net är ju att du bygger funktionaliteten med ett riktigt objekt-orienterat programmeringsspråk - och det gör du ju alltid, oavsett du använder code-behind eller inte. I gamla asp har du den möjligheten att använda ett riktigt programmeringsspråk endast om du skapar com-objekt och det var/är både svårare, sämre och klurigare att jobba med, i jämförelse med .net.

-----------------
Jag kan inte komma på någon signatur.

[Redigerat av NETwork den 31 jan 2002]

Medlem sedan juni 20008 205 inlägg
#13

finns de någon fördel att lägga de i en .cs fil?
Det enda svaret som behövs är att det är så man ska göra, annars gör man sig skyldig till ett ännu hemskare brott än de som använder ASP utan COM. Logiken ska inte vara bunden till presentationen, vilket kanske blivit en klyscha men det stämmer förbannat bra. Gör man något annat än ett snabbt fulhack borde det t.o.m. vara spöstraff på att blanda logik med gränssnitt. Alla objektorienterade plattformar i världen är inte värda ett piss om man inte själv arbetar efter samma modell. :)
Vill man efter ett tag slänga på ett annat gränssnitt på sin applikation (vanlig Windows-miljö eller något elektroniskt gränssnitt som SOAP, t.ex.) så slipper man skriva om allt.

------------------
God is real, unless declared integer.

[Redigerat av spango den 01 feb 2002]

Medlem sedan apr. 20012 266 inlägg
#14

ok... men vad behövs för att göra de till .cs filer?

------------------
kristoffer renholm | www.renholm.com

133 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)