webForumDet fria alternativet

sträng tack

.NET

9 svar · 410 visningar · startad av echoSwe

Medlem sedan nov. 20041 189 inlägg
Frågan#1
  1. detta vill jag åstadkomma:

string strAnswerEmail = (string)objRdr;

alternativt med annan syntax:

string strAnswerEmail = Convert.ToString(objRdr);

eftersom objRdr kommer att returnera en enda cell så tycker jag att det borde gå på något sätt. i klassisk asp hade man ju kontroll över varje loop, men hur kan man göra här?

Jag kan ju göra om det till en DataTable, men det verkar inte så logiskt...

  1. Mer strängar på riktigt basic nivå:
public string strConString = Server.MapPath("database.mdb");

som är deklarerad i klassen, genererar felet:

CS0118: 'System.Web.UI.UserControl.Server' denotes a 'property' where a 'class' was expected

allt detta i C#.

Medlem sedan maj 20012 812 inlägg
#2

string strAnswerEmail = (string)objRdr;

alternativt med annan syntax:

string strAnswerEmail = Convert.ToString(objRdr);

Det kan du inte! Varför för att objRdr är ett object en datareader och den kan du inte konvertera till en sträng även om datareader endast innehåller ett resultat från databasen. Så enkelt är det.

Det du kan göra är att skapa en egen DataReader klass som ärver från MS dataReader klass och i din egen datareader klass så gör du en override på ToString() methoden där du hämtar ut det enda resultat som du fått och så skriver du.

string strAnswerEmail = objRdr.ToString();

'System.Web.UI.UserControl.Server' denotes a 'property' where a 'class' was expected

Du har en UserControl som heter Server och det är i denna klass som den letar efter en statis method som heter Mappath(). Så du måste skriva ut den hela namespacet på din Server.Mappath() metod så den vet vilken klass som den skall använda sig av.

- M

Medlem sedan nov. 20041 189 inlägg
#3

Gladh skrev:

Det kan du inte! Varför för att objRdr är ett object en datareader och den kan du inte konvertera till en sträng även om datareader endast innehåller ett resultat från databasen. Så enkelt är det.

Det du kan göra är att skapa en egen DataReader klass som ärver från MS dataReader klass och i din egen datareader klass så gör du en override på ToString() methoden där du hämtar ut det enda resultat som du fått och så skriver du.

Jo, det kan man ju göra, men jag vill inte göra något fancy överhuvudtaget! Jag vill bara hämta en e-mailadress ur en databas!! Frågan har jag ju redan färdig, så jag kommer bara att få en cell returnerad, men hur använder jag det innehållet?

Du har en UserControl som heter Server och det är i denna klass som den letar efter en statis method som heter Mappath(). Så du måste skriva ut den hela namespacet på din Server.Mappath() metod så den vet vilken klass som den skall använda sig av.

Alltså, Server.MapPath är ju en inbyggt funktion i ASP .Net och ASP 3.0. Det är inget namespace så vitt jag vet, och om jag har fel så vilket i så fall?
Finns även server.execute, server.transfer etc...

Medlem sedan juli 20011 304 inlägg
#4

Undrar du helt enkelt hur man får ut ett värde ur en datareader?


if(objRdr.Read()) // ställer sig på första raden

{
      //Hämta kolumnen kolumnnamn från första raden
     strAnswerEmail = objRdr["kolumnnamn"].ToString()
}

Det finns fler sätt att få ut värdet på, exempelvis objRdr.getvalue(0) mm
Glöm inte att stänga readern när du är klar :)

Alltså, Server.MapPath är ju en inbyggt funktion i ASP .Net och ASP 3.0. Det är inget namespace så vitt jag vet, och om jag har fel så vilket i så fall?

Mycket riktigt. Borde fungera men det Gladh menar på är att det finns något annat som du har döpt till Server i ditt projekt (en UserControl). Komlpiatorn vet då inte varifrån den ska ta MapPath, din usercontrol eller systemets Server.Mappath. Helst ska man undvika att ha samma namn men annars kan man skilja dom genom att ange hela namnet med namespace framför för att tala om vilken man vill åt.

Den Server du vill åt kommer genom arvet från Page (som ju alla asp.net sidor ärver från)
Page.Server.MapPath("");

Medlem sedan nov. 20041 189 inlägg
#5

Yey! Tack för att du svarade på newbiens fråga, och även tack gladh för att du försökte ;).

Det var precis det som jag undrade över Jon. Men objRdr.getvalue(0) verkar inte funka - står något i stil med att det inte stämmer överens med specifikationerna att den startar på index 0, men jag får kolla på nätet om jag vill använda den. if (objRdr.Read()) fungerar i alla fall.

Page.Server funkar tyvärr inte, men jag har ingen klass, namespace eller funktion eller subrutin som heter server...

Medlem sedan nov. 20041 189 inlägg
#6

Jag har en ny fråga!

Kolla denna strängen:

string strBody = String.Format("<html><head><title>Meddelande skickat från address.com från {0}</title>" +
	"<style type=\"text/css\"> body { font: 10px/12px verdana; } </style>\n " +
	"</head><body>" +
	"Namn: {0}\n<br /> Klass: {1}\n<br />Meddelande:<hr /> {2}\n</body></html>", 
	Server.HtmlEncode(txtName.Text), 
	Server.HtmlEncode(txtName2.Text),
	Server.HtmlEncode(txtName3.Text));

enkelt uppbyggd, men orsakar fel genom att { finns med i den, och { är ett tecken som används i c#. det funkar inte att använda sig av { heller, eftersom det blir just samma sak i källan till mailet, istället för som det riktiga tecknet. Någon idé hur man kan göra om man inte vill använda string.format med den här?

Medlem sedan maj 20012 812 inlägg
#7

När man skall bygga upp strängar med inputdata så rekomenderas att du använder dig av StringBuilder som finns i System.Text namespacet.

- Magnus

Medlem sedan nov. 20041 189 inlägg
#8

HttpContext.Current.Server.MapPath("address/fil.jpg"); ska det vara om man vill använda sig av Server.MapPath(); i en klass. (utanför en metod)

Medlem sedan juni 2004533 inlägg
#9

MSDN:
"To specify a single literal brace character in format, specify two leading or trailing brace characters; that is, '{{' or '}}'."

Man använder alltså dubbla klamrar för att skriva klamrar i en formatsträng.

Medlem sedan nov. 20041 189 inlägg
#10

Jaha, tack så mycket Guffa :D

400 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
131 ms — hämta statistik (db)
140 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)