Jeg synes nu os det var svært at vænne sig til den nye tankegang, når man er vant til alm. asp. Men det kommer med tiden. Jeg kan evt. anbefale dig at købe lidt bøger (beginning bøger helst) omkring det, så kommer du langt vil jeg mene.
Anyway, måden du så skal skrive din sti til database er faktisk simpel:
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test\database.mdb;User Id=admin;Password=;");
Bemærk det @ jeg har sat før selve connectionstring, det er fordi C# regner med der kommer et tegn når der bliver skrevet en '\'. Men det kan du læse mere om her:
http://www.softsteel.co.uk/tutorials/cSharp/lesson4.html - under "Escape Sequences and Verbatim Strings"
Det andet du snakker om, kan du f.eks. løse med nested repeaters. Det har jeg lavet en lille eksempel på som du kan se her:
Default.aspx:
<asp:Repeater ID="parentRepeater" runat="server">
<ItemTemplate>
<b>
<%# DataBinder.Eval(Container.DataItem,"[linkcategoryname]") %>
: </b><br />
<asp:Repeater ID="childRepeater" DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>'
runat="server">
<ItemTemplate>
<a href='<%# DataBinder.Eval(Container.DataItem, "[linkhref]")%>'
target="_blank">
<%# DataBinder.Eval(Container.DataItem, "[linkname]")%>
</a>
</ItemTemplate>
<SeparatorTemplate>
<br />
</SeparatorTemplate>
</asp:Repeater>
<br />
<br />
</ItemTemplate>
</asp:Repeater>
Husk lige at import System.Data namespacet i toppen af siden, ellers vil det ikke virke: <%@ Import Namespace="System.Data" %>
Codebehind:
using System;
using System.Data;
using System.Data.OleDb;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default : System.Web.UI.Page
{
public Default()
{
Page.Init += new System.EventHandler(Page_Init);
}
protected void Page_Load(object sender, EventArgs e)
{
// connection til db.
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|nira.mdb;User Id=admin;Password=;");
try
{
// DataAdapter til at "fylde" tabellen i DataSet.
OleDbDataAdapter cmd1 = new OleDbDataAdapter("select * from linkcategory", con);
// Første DataSet fyldes med tabellen LinkCategory fra db.
DataSet ds = new DataSet();
cmd1.Fill(ds, "linkcategory");
// Anden DataAdapter til at "fylde" tabellen Links i DataSet.
OleDbDataAdapter cmd2 = new OleDbDataAdapter("select * from links", con);
cmd2.Fill(ds, "links");
// Luk connection
con.Close();
// Opret en relation mellem de 2 tabeller som nu ligger i datasettet.
// Forestil dig dataset som en slags database i hukommelsen (i dine ram)
// Grunden til jeg bruger dette er fordi alm. db arbejde er normalt det som
// man refererer som tungt arbejde på serveren, så det er med at holde os til
// så lidt db adgang som muligt. At læse fra hukommelsen er hurtigere.
// "myrelation" er bare navnet på selve relationen, som vi skal bruge i Source
// på Default.aspx.
ds.Relations.Add("myrelation", ds.Tables["linkcategory"].Columns["linkcategoryid"], ds.Tables["links"].Columns["linkcategoryid"]);
// Binde tabellen LinkCategory til den 1. repeater.
parentRepeater.DataSource = ds.Tables["linkcategory"];
Page.DataBind();
}
catch (Exception err)
{
Response.Write("Error: " + err.Message.ToString());
}
}
private void Page_Init(object sender, EventArgs e)
{
InitializeComponent();
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
}