gregganMedlem sedan jan. 2004678 inlägg Hejsan.
jag ska skapa en relation mellan två tabeller.
den ena är user som har all information om användaren, den andra är gästbok där inläggen finns och vem gästboksinlägget tillhör samt vem som skrev det.
jag har hört att det finns två sätt att skapa relationer och undrar vad skillnaden är och vilket som är bäst.
dessa är join och DataRelation
Vad är skillnaden, vilket är bäst? Och vilket är bäst för det syftet jag ska använa det till?
/Erik
PDahlenMedlem sedan apr. 2004778 inlägg En relation har du redan. Du har din user tabell och gästbok tabell. Datarelationen däremellan består av att gästboktabellen har en kolumn som anger user id.
JOIN är en SQL-fråga man använder för att plocka ut resultat från flera tabeller.
Om syftet är att plocka fram inlägg för en specifik användare så behöver du bara en enkel SELECT-sats mot gästbokstabellen där du skickar in ett userid.
Om du även vill ha fram t.ex. namnet på användaren så kör du en JOIN.
T.ex.
SELECT username, gbmess, bgdate
FROM user u JOIN gästbok gb ON u.userid = gb.userid
WHERE u.userid = 1
Ovanstående plockar fram alla inlägg för användaren med id 1 samt namnet på användaren.
När det gäller ditt gästboksscenario så skulle jag ha en annan datamodell med tabellerna; användare, gästbok, inlägg.
Om en användare ska kunna ha flera gästböcker lägger man även till en tabell som skapar en "n-n relation". Den tabellen innehåller då userid och gbid.
Sen finns det ett sätt till att se på det som kanske är vad du syftar på med JOIN och DataRelation. JOIN används som jag skrev ovan, i själva SQL-frågan.
I ett DataSet kan du däremot skapa en relation mellan två tabeller. Det innebär att du i tabell 1 i ditt DataSet har tabellen user och i tabell 2 har du tabellen gästbok.
I ditt fall skulle jag köra en JOIN. Jag använder DataSet väldigt sällan och i det här fallet är det onödigt prestandakrävande.
gregganMedlem sedan jan. 2004678 inlägg Tack så mycket, det var ett mycket givande svar. Dock återstår några problem.
Jag använder i nuläget ett datasetobjekt för att föra över gästboksinformationen från databasen till min datagrid. Kan jag fortfarande använda join trots att jag använder dataset eller rekomenderar du något annat?
Jag är inte jättehet när det gäller relationen mellan databasen och datagriden. Har lite svårt att förstå det. Men jag har för mig att jag var tvungen att använda en dataadapter för att kunna ha en paging funktion i gästboken, men sedan varför jag använde dataset vet jag inte.
Jag testade join lite men fick hela tiden problem när det placerades i dataset. Det kanske inte fungerar ihop? :q
Engine^Medlem sedan dec. 20003 887 inlägg Du har lyckats med en begreppsförväxling här. Den JOIN som utförs i din SQL-sats har inget att göra med ditt DataSet (om man inte vill ägna sig åt hårklyveri).
Du plockar ut viss data ur databasen med en SQL-fråga. Resultatet från frågan skickar du sedan till ditt DataSet.
Möjligen så ska du nog ta och dyka ner i lite SQL-studier ;)
gregganMedlem sedan jan. 2004678 inlägg okej.. då behöver jag ju inte tänka på att jag använder dataset. det var skönt. :)
men en sak undrar jag. behöver jag ange alla fält. Eller kan jag skriva select * fortfarande?
gregganMedlem sedan jan. 2004678 inlägg nya problem... vet dock inte vart felet ligger.
det känns som den här tråden är mer passande i SQL än i ASP.NET.. men mitt felmeddelande jag får upp känns en aning otydligt...
här följer lite detaljer...
SQL-frågan:
"SELECT guestbook.gbid, guestbook.suserid, users.nickname, guestbook.auserid, guestbook.inlagg, guestbook.skickat, guestbook.usergbid, users.syns FROM users INNER JOIN guestbook ON users.userid = guestbook.suserid WHERE guestbook.auserid='" & request.QueryString("userid") & "' order by skickat desc"
den skapade jag i access och där fungerade den utan problem. (request.querystring bytte jag ut mot ett nummer)
när jag nu går in på sidan får jag följande felmeddelande:
Exception Details: System.Data.OleDb.OleDbException: Type mismatch in expression.
Source Error:
Line 92: Dim myAdapter as New oledbDataAdapter(cmd)
Line 93: Dim ds as New DataSet()
Line 94: myAdapter.Fill(ds)
Line 95:
Line 96:
där cmd är sqlsatsen som jag visat ovan.
Vad kan vara fel? När jag kör med min gamla sqlsats utan join blir det inga problem.
/r
det är en sak till jag undrar över.. när jag senare i min datagrid ska hänvisa till fälten i databasem genom dataitem.container... ska jag ange guestbook.inlagg då eller bara inlagg?
Engine^Medlem sedan dec. 20003 887 inlägg Om guestbook.auserid är numeriska värden ska du ta bort apostroferna du har där
gregganMedlem sedan jan. 2004678 inlägg tack det var där felet låg.. nu har jag lyckats åstadkomma det jag ville... tack båda två för hjälpen :)