Avatar billede dj_uncas Nybegynder
20. februar 2005 - 19:20 Der er 34 kommentarer og
1 løsning

vise tekst fra database

jeg har en asp.net side, som er en del af et cms system. Teksten på siden skal derfor hentes i en database, så den gså kan ændres igen. Mit spørgsmål er, hvordan man kan tage teksten fra databasen og tilføre det til en kontrol? Jeg har prøvet med Literal og Label, men de kender ikke til DataSource, så jeg er lidt på bar bund...
Avatar billede arne_v Ekspert
20. februar 2005 - 19:39 #1
Du kan:

dinlabel.Text = stringfradatabase;
Avatar billede dj_uncas Nybegynder
20. februar 2005 - 20:05 #2
øhh, okay.. Det var en meget vag forklaring :)

Hvis jeg normalt connecter således:
myDataGrid.DataSource = rs.dr;
MyDataGrid.DataBind();

hvad skal jeg så gøre anderledes v. label kontrol?
Avatar billede arne_v Ekspert
20. februar 2005 - 20:14 #3
Vag ? Det er køreklar kode !
Avatar billede arne_v Ekspert
20. februar 2005 - 20:16 #4
Du har:

<asp:label id="dinlabel" runat="server"/>

Du har din streng fra databasen:

string stringfradatabase = (string)dindatareader.ExecuteScalar();

og du assigner med:

dinlabel.Text = stringfradatabase;
Avatar billede dj_uncas Nybegynder
20. februar 2005 - 21:24 #5
hmm, jeg forstår ikke helt hvad du mener her.. Ok, jeg har min label, men jeg bliver tabt allerede i v. "string stringfradatabase..." Jeg har en klasse i en codebehind fil, som jeg bruger til at oprette en forbindelse og udføre et recordset. dvs. jeg kun skrive følgende i <script> blokken:

MySQL DBConn = new MySQL();
RecordSet rs = DBConn.Execute("Select * From pages Where pageID='frontpage'");
string stringfradatabase = (string)rs.dr.ExecuteScalar();
mitlabel.Text = stringfradatabase;

... men compileren siger den ikke kender udtrykket "ExecuteScalar" ?
Avatar billede arne_v Ekspert
20. februar 2005 - 21:29 #6
string stringfradatabase = (string)dindatareader.ExecuteScalar();

er iøvrigt forkert - det skal være:

string stringfradatabase = (string)dincommand.ExecuteScalar();
Avatar billede arne_v Ekspert
20. februar 2005 - 21:30 #7
Hvis du kun skal putte en string ind i en label har du intet at bruge dit DataSet til.

Men hvis du skal bruge det i anden sammenhæng så fisker du vel bare en streng ud af det dataset.
Avatar billede arne_v Ekspert
20. februar 2005 - 21:35 #8
Noget a la:

string stringfradatabase = (string)ditdataset.Tables["tabelnavn"].Rows[rowno],Columns[colno];
Avatar billede dj_uncas Nybegynder
20. februar 2005 - 21:40 #9
hmm, det vil ikke virke! Det kan da ikke være rigtigt at det skal være så svært at hente noget simpel tekst ud af en database :( Men alm ASP var det ret simpelt.. :)
Avatar billede dj_uncas Nybegynder
20. februar 2005 - 21:41 #10
findes der ikke en kontrol der ligner lable, men som understøtter datasource/databaind?
Avatar billede arne_v Ekspert
20. februar 2005 - 22:11 #11
"det vil ikke virke" ? compile fejl ? runtime fejl ? hvilken fejl ?
Avatar billede dj_uncas Nybegynder
20. februar 2005 - 22:21 #12
undskyld, jeg var vist lidt kort for hovedet, men jeg er ved at være lidt træt af de kringlede måder jeg ofte synes man bruger i ASP.NET.

Fejl:
CS0117: 'dragoer.database.RecordSet' does not contain a definition for 'ExecuteScalar'

se evt. her: www.aoa.dk/it
Avatar billede arne_v Ekspert
20. februar 2005 - 22:23 #13
ExecuteScalar er en metode på en Command ikke på et DataSet.
Avatar billede arne_v Ekspert
20. februar 2005 - 22:24 #14
XxxxCommand cmd = new XxxxCommand("SELECT felt FROM tabel WHERE id=" +id, con);
string stringfradatabase = (string)dindatareader.ExecuteScalar();
Avatar billede arne_v Ekspert
20. februar 2005 - 22:24 #15
Alternativt skal du fiske værdien ud af data set som jeg beskriver 21:35:47
Avatar billede dj_uncas Nybegynder
20. februar 2005 - 22:31 #16
se nu: www.aoa.dk/it

System.Data.IDataReader' does not contain a definition for 'ExecuteScalar'

Hvad er nu det?
Avatar billede segato Nybegynder
20. februar 2005 - 22:31 #17
Er enig med Arne. Hvis du bare skal hente en strng ud og vise den er et DataSet nok lige i overkanten:D Mildest talt. Man kan sagtens hente data ud uden at bruge et dataset. Det forklarer Arne rimeligt fint.
Avatar billede arne_v Ekspert
20. februar 2005 - 22:33 #18
Jeg roder stadig rund i command og datareader.

Glem alt om den data reader.

XxxxCommand cmd = new XxxxCommand("SELECT felt FROM tabel WHERE id=" +id, con);
string stringfradatabase = (string)cmd.ExecuteScalar();
Avatar billede arne_v Ekspert
20. februar 2005 - 22:35 #19
Jeg ved ikke helt om jeg forklarer eller forvirrer
Avatar billede burningice Nybegynder
21. februar 2005 - 09:29 #20
segato>> hvordan ser din sql-streng ud?

hvis du kun henter en ting ud fra databasen, er ExecuteScalar, som arne beskriver, den rigtige at bruge. Hvis du henter flere ting ud og skal have bindet til flere labels skal du bruge en reader ov avancere til første record før du henter noget fra den:

1)

OleDbCommand command = new OleDbCommand(query, conn);
conn.Open();

dinLabel.Text = (string)command.ExecuteScalar();

conn.Close();

2)

OleDbCommand command = new OleDbCommand(query, conn);
conn.Open();

OleDbDataReader reader = command.ExecuteReader();
reader.Read();

dinLabel1.Text = reader.GetString(0);
dinLabel2.Text = reader.GetString(1);
dinLabel3.Text = reader.GetString(2);

reader.Close();
conn.Close();
Avatar billede segato Nybegynder
21. februar 2005 - 12:07 #21
Hvordan ser hvilken SQL ud? Manden siger han vil hente EN streng ud fra en database og vise den i en Label. Og der mener jeg da bare han skal følge Arnes forslag med et kmmand objekt og en ExecuteScalar. Men det er ikke mig der har oprettet spørgsmålet:D
Avatar billede burningice Nybegynder
21. februar 2005 - 15:19 #22
segato>> i know... det nævner jeg også i min kommentar, og viser også eksempel på begge dele
Avatar billede dj_uncas Nybegynder
21. februar 2005 - 20:00 #23
tak for svarene, men jeg er desværre ikke kommet videre...

Jeg vil helst kunne hente mere end en streng ud. Derfor burde jeg nok bruge forslag 2) (09:29:15), men da resten af mine database koder er lavet med Odbc hjælper det ikke så meget :(

Nu ligger hele min database klasse her: www.aoa.dk/it/dbclass.txt

Jeg håber i måske kan lure noget ud fra det? Jeg er selv helt på bar bund, da jeg ikke har den fjerneste forstand på databaseforbindelser.
Avatar billede arne_v Ekspert
21. februar 2005 - 20:29 #24
MySQL db = new MySQL();
RecordSet rs = db.Execute("SELECT f1,f2,f2 FROM t");
rs.MoveNext();
dinlabel1.Text = rs.GetString("f1");
dinlabel2.Text = rs.GetString("f2");
dinlabel3.Text = rs.GetString("f3");
Avatar billede dj_uncas Nybegynder
21. februar 2005 - 21:25 #25
ja tak!!! Nu virker det endelig, mange mange tak skal du have..

m. rs.Close(); og db.Close(); virker den helt efter hensigten.. Point?
Avatar billede arne_v Ekspert
21. februar 2005 - 21:26 #26
jo tak
Avatar billede arne_v Ekspert
21. februar 2005 - 21:27 #27
På langt sigt vil jeg iøvrigt anbefale dig at bruge ADO.NET mere direkte
fremfor gennem det "ASP emulerings lag"
Avatar billede burningice Nybegynder
21. februar 2005 - 21:55 #28
ja, så er det jo klart ingen af vores forslag virker når har et hjemmebrygget lag mellem din kode og ADO.Net
Avatar billede dj_uncas Nybegynder
21. februar 2005 - 22:26 #29
arne: Hvad mener du med "bruge ADO.NET mere direkte"? Jeg troede det her var måden man gjorde det på, da jeg har set lignende løsninger i andre applikationer.
Avatar billede arne_v Ekspert
21. februar 2005 - 22:32 #30
Din RecordSet klasse er vel ren "ASP emulering". Du kunne lige så godt
bruge DataReader direkte. Det er ikke usædvaneligt at pakke connection og
execute ind i en klasse, men normalt vil den returnere enten er
DataReader eller en collection med instanser af en klasse.
Avatar billede dj_uncas Nybegynder
21. februar 2005 - 22:37 #31
Hvad er fordelene ved det du nævner? Umiddelbart synes jeg det her fungerer fint?
Avatar billede arne_v Ekspert
21. februar 2005 - 22:39 #32
Selvfølgelig fungerer det.

Men:
  - jeg synes ikke at RecordSet klassen bidrager med funktionalitet
  - ASP udviklere vil finde den hjælpsom men ASP.NET udvikleree vil finde
    den forvirrende (og på langt sigt skal din applikation vel vedligeholdes
    af de sidste !)
Avatar billede dj_uncas Nybegynder
21. februar 2005 - 22:47 #33
okay, gode pointer. Jeg kan lide en mand der ved hvad han snakker om :D

Det projekt jeg er i gang med i øjeblikket er et eksamensprojekt, så det skal selvfølgelig helst være så perfekt som muligt, så jeg vil MEGET gerne lære mere om ADO.NET, så hvis du har nogle artikler/tutorials til at komme i gang med ville det være stort!
Avatar billede arne_v Ekspert
21. februar 2005 - 23:05 #35
(du behøver ikke nødvendigvis bruge DAAB men du kan sikkert få lidt inspiration)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester