webForumDet fria alternativet

Asp.net

4 svar · 252 visningar · startad av Han-Solo

Han-SoloMedlem sedan jan. 2001290 inlägg
#1

Håller på att lära mig ASP.NET!
Men nu har jag kört fast i hur man visar innehållet i en databas.

Följande kod är tagen rakt ur en bok (nästan) :

<%@ Import Namespace = "System.Data" %>
<%@ Import Namespace = "System.Data.OleDb" %>
<script language="VB" runat="server">
		Sub Page_Load (Sender as object, E as Eventargs)
			dim con as new OleDbConnection _
				("Provider=Microsoft.Jet.OLEDB.4.0;" & _
				"Data Source=C:\Hemsidorna\arbeten\net\db\db.mdb")
			dim cmd as new OleDbDataAdapter _
				("SELECT * FROM tblArticklar", con)
			dim ds as DataSet = new  DataSet()
			cmd.fill(ds, "tblArticklar")
			MinaData.DataSource = ds.Tables("tblArticklar").DefaultView
			MinaData.DataBind()
		end sub
	</script>
<Html>
	<head>
		<title>db</title>
	</head>
	<body>
		Databas test...
		<br>
<br>
		<asp:DataList ID="MinaData" RepeatColumns="1" RepeatDirection="Vertical" Runat="server" />
		<ItemTemplate>
			<div>
				<b>rubrik:</b><%# DataBinder.Eval (Container.DataItem, "rubrik") %>
				<br>
			</div>
		</ItemTemplate>
		</asp:DataList>
	</body>
</Html>

Det fel meddelande jag får är

Compiler Error Message: BC30456: The name 'DataItem' is not a member of 'System.Web.UI.Control'.

Är det någon påläst som kan säga mig vad det är för 'fel som är trasigt'? Det står i boken att det ska vara ordet 'DataItem' där... men???

------------------
...in a galaxy far far away

NETworkMedlem sedan juni 20011 732 inlägg
#2
<asp:DataList ID="MinaData" RepeatColumns="1" RepeatDirection="Vertical" Runat="server" />

Ser du vad du har gjort i slutet av den raden? Du avslutar taggen innan du skriver innehållet i den. :)

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

Han-SoloMedlem sedan jan. 2001290 inlägg
#3

Du är en ängel eller så är jag en idiot... mest troligt är väl en kombination :)
---
Men jag vet inte... jag är van .asp
där räcker det ju att skriva SQL satsen... här måste jag ange vilken tabell jag jobbar mot ytterligare två gånger...

nå, det fungerar ju ... men nu undrar jag om det inte finns något annat sätt att presentera en databas, som är att föredra, ur prestanda synpunkt först och främst?!

------------------
...in a galaxy far far away

NETworkMedlem sedan juni 20011 732 inlägg
#4

Nu kan inte jag vb.net så bra så jag skriver mina exempel i c# istället, men principen är väl den samma.

Först och främst ett litet tips (som du kanske redan kan men ändå), jag lägger alltid sökvägen till databasen som en sträng i global.asax, sen är det bara att hämta den därifrån varje gång du kopplar upp dig mot databasen. Mindre kod och om du byter sökväg så ändrar du på ETT ställe.

I global.asax

Application["databasen"] = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\sökväg\\till\\databas.mdb";

Sen när du kopplar upp dig mot databasen:

OleDbConnection myConnection = new OleDbConnection(Application["databasen"]);
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM Tabell", myConnection);

Anledningen till att du måste ange vilken tabell du jobbar mot flera gånger är att du lägger dina data i ett dataset, som ju kan innehålla FLERA tabeller. Då måste du sedan ange vilken av dessa tabeller du arbetar med. Om du direkt lägger datan i en datatable istället så slipper du det, men då kan du bara ha en tabell där som sagt.

En datatable eller ett dataset är en spegling av din tabell/databas. Den lägger sig i ramminnet och du jobbar sedan mot datasetet istället för mot din databas. Detta är naturligtvis mycket snabbare än att hela tiden köra mot din riktiga databas.

DataSet ds = new DataSet();		
myCommand.Fill(ds, "MinTabell");

Ett dataset kan ju som sagt innehålla flera tabeller. Du kan alltså lägga till flera tabeller i ditt dataset och sedan jobba mot datasetet utan att behöva öppna din databas igen.

myCommand = new OleDbDataAdapter("SELECT * FROM NyTabell, myConnection);
myCommand.Fill(ds, "NyTabell");

Nu när du har dina tabeller i ditt dataset så kan du enkelt stoppa in dem i exempelvis en datagrid. Eftersom jag nu har ett dataset så måste jag plocka ut vilken av mina tabeller jag vill arbeta med, tabellen lägger jag sedan i en dataview. Slutligen sätter jag min dataview som datakälla till min datagrid som jag använder för att presentera data på sidan:

dv = ds.Tables["MinTabell"].DefaultView;
MyDataGrid.DataSource = dv;
MyDataGrid.DataBind();

Hur en enkel datagrid ser ut vet du säkert:

<asp:DataGrid id=MyDataGrid runat="server"></asp:DataGrid>

När du sedan har fyllt exempelvis en datagrid så kan du ju verkligen börja utnyttja fördelarna med både asp.net och ett riktigt programmeringsspråk. :) Lägg exempelvis till AlternatingItemStyle-BackColor="Yellow" i din datagrid:

<asp:DataGrid id=MyDataGrid AlternatingItemStyle-BackColor="Yellow" runat="server"></asp:DataGrid>

För att inte tala om när man börjar bygga på funktionalitet i sin datagrid/dataset/repeater, exempelvis en knapp för att radera en viss rad i datagriden osv.

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

Han-SoloMedlem sedan jan. 2001290 inlägg
#5

Det var Acess det...

Hur kopplar jag en mySQL databas på motsvarande sätt? Där har man ju användar namn och löse ist för en fil???

------------------
...in a galaxy far far away

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