---
title: "stänga"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/20334-stänga"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "renholm"
published: "2002-01-30T21:34:00.000Z"
updated: "2002-02-01T23:27:00.000Z"
replies: 13
views: 314
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/20334-stänga"
---

# stänga

## #1 — renholm, 2002-01-30T21:34Z

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#)

Permalänk: https://www.webforum.nu/p/20334

## #2 — juventus1, 2002-01-31T08:52Z

Hej!

Minneshanteringen fungerar lite annorlunda .NET jämfört med ASP. Kika lite [här.](http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28000519)

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

Permalänk: https://www.webforum.nu/p/349378

## #3 — renholm, 2002-01-31T10:55Z

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();
%>
```

Permalänk: https://www.webforum.nu/p/349379

## #4 — Grynet, 2002-01-31T11:19Z

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

Permalänk: https://www.webforum.nu/p/349380

## #5 — NETwork, 2002-01-31T12:25Z

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!

Permalänk: https://www.webforum.nu/p/349381

## #6 — renholm, 2002-01-31T13:42Z

> 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](http://samples.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/customize/datalist1.src&file=CS\DataList1.aspx&font=3) ?

Permalänk: https://www.webforum.nu/p/349382

## #7 — renholm, 2002-01-31T14:11Z

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>
```

Permalänk: https://www.webforum.nu/p/349383

## #8 — NETwork, 2002-01-31T14:27Z

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.

Permalänk: https://www.webforum.nu/p/349384

## #9 — renholm, 2002-01-31T14:49Z

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 :)

Permalänk: https://www.webforum.nu/p/349385

## #10 — NETwork, 2002-01-31T15:16Z

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...).

Permalänk: https://www.webforum.nu/p/349386

## #11 — renholm, 2002-01-31T15:40Z

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

Permalänk: https://www.webforum.nu/p/349387

## #12 — NETwork, 2002-01-31T16:23Z

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\]

Permalänk: https://www.webforum.nu/p/349388

## #13 — spango, 2002-02-01T22:29Z

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.

Permalänk: https://www.webforum.nu/p/349389

## #14 — renholm, 2002-02-01T23:27Z

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

Permalänk: https://www.webforum.nu/p/349390

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/20334-stänga
