---
title: "Två frågor från en förvirrad nybörjare"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/136094-två-frågor-från-en-förvirrad-nybörjare"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "JPS"
published: "2005-10-20T20:59:58.000Z"
updated: "2005-10-21T12:55:44.000Z"
replies: 2
views: 331
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/136094-två-frågor-från-en-förvirrad-nybörjare"
---

# Två frågor från en förvirrad nybörjare

## #1 — JPS, 2005-10-20T20:59Z

1\. Databaskoppling
På <http://www.dotnetjunkies.com/QuickStartv20/aspnet/>
så används databskopplingar som 

```
<asp:SqlDataSource ID="SqlDataSource2" Runat="server" SelectCommand="SELECT DISTINCT [state] FROM [authors]"
```

 

hur är dessa? Är det något som man - kan/bör/inte bör använda?

2\. Visa post
Vad är rätt/fel att använda då man vill visa en post?
skall man använda 

```
<asp:Repeater id="customers" runat="server">
<ItemTemplate>
<%#Container.DataItem("Namn")%>
</ItemTemplate>
</asp:Repeater>
```

eller

```
While myReader.Read
            LabelNamn.Text = myReader("Namn")
End While

<asp:Label id="LabelNamn" runat="server" />
```

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

## #2 — emission, 2005-10-20T22:59Z

> **JPS skrev:**
>
> 1\. Databaskoppling
> På <http://www.dotnetjunkies.com/QuickStartv20/aspnet/>
> så används databskopplingar som 
>
> ```
> <asp:SqlDataSource ID="SqlDataSource2" Runat="server" SelectCommand="SELECT DISTINCT [state] FROM [authors]"
> ```
>
>  
> 
> hur är dessa? Är det något som man - kan/bör/inte bör använda?

Om DataSource-kontrollerna gör dig produktiv, så visst... Det finns massor av åsikter om vad som är rätt och fel, bra och dåligt, men till syvende och sist är det vad du åstadkommer som avgör av det var rätt eller fel.

Med det sagt, så ...:)

- Att DataSource är utformad som en kontroll som läggs på sidan är genomkorkat. Varför ska jag lägga något på sidan som ändå inte ska hamna där?
- Att lägga datalagret inne i designlagret går emot nästan alla etablerade utvecklingsmodeller och riskerar att skapa spagettikod. Jag är ingen rättrogen flerlagersfascist, men här känns det som att det gått lite väl långt.
- De flesta som jobbat med DataGrid etc. vet att dessa väldigt ofta kräver "modifiering" runtime, dvs. att man manipulerar data i ItemDataBound etc. Det behovet kommer inte att försvinna, och helt plötsligt har vi Spagetti Carbonara, med datalager i designlagret och design farligt nära data-/affärslagret

 

Det måste dock tilläggas att själva utformningen, av DataSource-kontrollerna, har mycket vettigt i sig, och kanske kan de bli riktigt användbara om man lär sig att använda dem på ett smart sätt. I synnerhet ObjectDataSource är lovande. Den spontana känslan är dock att de tillkommit för att glädja drag-and-drop-programmerare, utan tanke på att de sabbat för dem som inte jobbar så.

> **JPS skrev:**
>
> 2\. Visa post
> Vad är rätt/fel att använda då man vill visa en post?
> skall man använda 
>
>
> ```
> <asp:Repeater id="customers" runat="server">
> <ItemTemplate>
> <%#Container.DataItem("Namn")%>
> </ItemTemplate>
> </asp:Repeater>
> ```
>
> 
> 
> eller
>
>
> ```
> While myReader.Read
>             LabelNamn.Text = myReader("Namn")
> End While
> 
> <asp:Label id="LabelNamn" runat="server" />
> ```

Det övre exemplet kan stoppas i papperskorgen. Det är inget repeterande fält och då ska man inte dra med sig allt bagage som en repeater innebär.

Det under exemplet är mer rätt, men även där är det en loop i onödan (while).  Ska man bara plocka ut ett värde från databasen så ska man använda t.ex. ExecuteScalar (som direkt returnerar värdet) i stället för ExecuteReader, eller åtminstone göra om While till If, eftersom myReader endast innehåller en rad.

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

## #3 — JPS, 2005-10-21T12:55Z

Ok! Tackar för all input!  (y) 
(Du har helt rätt med kod i design men då jag är van vid vanlig
asp så har jag ännu inte hittat alla fördelar med att dela upp koden.
Jag kan tänka mig att det har stor skillnad för webbsidor där man är har flera
olika personer som programmerare, desiger som arbetar med samma sida.)

Jag glömde en fråga igår så här kommer den!!!

Jag undrar hur man gör med ExecuteReader (ExecuteScalar) när ingen post finns?
I vanliga ASP skrev man:

```
<% If RS.EOF Then %>
Det finns ingen post att visa.
<% Else %>

<% = RS("Namn")%><br>
<% = RS("Adress")%><br>
o.s.v.
<% End If %>
```

 

Hur gör man med .NET? Visa gärna med kod. (Du skrev att det var fel med While?)

```
Sub Page_Load(Src As Object, E As EventArgs)

	Dim Connection, SQL, dbComm, dbRead
	Connection=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & server.mappath("../Nisse.mdb"))
	
	Try
	Connection.Open()
	
	SQL="SELECT * FROM Kontakter WHERE KontaktId = " & Request("KontaktId")

	dbcomm=New OleDbCommand(SQL,Connection)
	dbRead=dbcomm.ExecuteReader()
	'Projekt.DataSource=dbRead
	'Projekt.DataBind()

	While dbRead.Read
		Namn.Text = dbRead("Namn")
	Adress.Text = dbRead("Adress")
o.s.v.
	End While
	
	Catch ex as exception
		l3.text = "Error!"
	Finally
	
	dbRead.Close()
	Connection.Close()		
	
	End Try
   
End Sub
```

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/136094-två-frågor-från-en-förvirrad-nybörjare
