webForumDet fria alternativet

Problem med DS

10 svar · 633 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Det har varit lite dåligt med svar här, men jag gör ett försök till
Jag har en array som innehålleralfabetet. Jag vill se om jag har några
titlar som börjar på samma bokstav.

string SQL="";
string visaAlfa="";
DBConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
 Source= " + Server.MapPath("Data") + "\\allt.mdb;Persist Security Info=False");
string info = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,Å,Ä,Ö";
string[] arInfo = new string[29];    
char[] splitter  = {','};            
arInfo = info.Split(splitter);
for(int x = 0; x < arInfo.Length; x++)
{
SQL = "SELECT Title FROM t_Lyrics WHERE left(Title,1) = '" + 
(arInfo[x]) + "' ORDER BY left(Title,1)";
Adapter = new OleDbDataAdapter(SQL,DBConn);			
DataSet ds = new DataSet();
Adapter.Fill(ds, "Texter");
if(ds.Tables["Texter"].Columns["Title"].ToString().Equals(arInfo[x]))
visaAlfa +="<a HREF=result.asp?id=" + (arInfo[x]) + "  target=mitten>" + 
(arInfo[x]) + "</a>&nbsp;";
else
visaAlfa += (arInfo[x])+ "&nbsp;";
}
lAlfaBetet.Text = visaAlfa;

JAg får inga fel med den här koden, men den visar inga "träffar" trots att
de finns. Vad gör jag för fel?

DinoMedlem sedan sep. 20011 914 inlägg
#2
string sql = "SELECT DISTINCT left(title,1) AS letter FROM t_Lyrics ORDER BY letter";
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
 Source= " + Server.MapPath("Data") + "\\allt.mdb;Persist Security Info=False");
OleDbCommand command = new OleDbCommand(sql, conn);  

List<string> col = new List<string>();

using(conn)
{
   conn.Open();
   OleDbDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection);

   while(dr.Read())
   {
      col.Add(dr["letter"].ToString());
   }
}

StringBuilder sb = new StringBuilder();

string[] input = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","Å","Ä","Ö"};

List<string> alp = new List<string>(input);

foreach(string s in alp)
{
   if(col.Contains(s))
   {
      sb.Append(string.Format("<a HREF='result.asp?id={0}' target='mitten'>{0}</a>", s));
   }else
   {
      sb.Append(s);
   }
   sb.Append("&nbsp;");
}

lAlfaBetet.Text = sb.ToString();
sawMedlem sedan mars 20011 880 inlägg
#3

Hej Dino.
Tack för svaret, det var ett helt nytt sätt som jag inte har sett innan.
Nu tog jag och kopierade din kod rakt av (innan jag försöker att lära mig den),
och jag fick en del fel. Först, jag har klistrat in detta i codebehind, jag urgår
ifrån att det skulle vara så.
Här är de fel som jag fick;

List<string>
c:\inetpub\wwwroot\ASP_Net-Test\Vistext\Index.aspx.cs(54): 
Invalid expression term 'string'

col
c:\inetpub\wwwroot\ASP_Net-Test\Vistext\Index.aspx.cs(54): ; 
expected

new List<string>();
c:\inetpub\wwwroot\ASP_Net-Test\Vistext\Index.aspx.cs(54): 
A new expression requires () or [] after type

..detta var bara början, men om jag förstår hur du har tänkt så kanske
jag kan rätta till resten själv.

[REDIGERAT]
JAg hittade felet på mi första kod:

int rader = ds.Tables["Texter"].Rows.Count;
if(rader > 0)
osv
DinoMedlem sedan sep. 20011 914 inlägg
#4

Börjar med att ta ut de bokstäver som finns och lägger in de i en collection, "col". Detta görs endast en gång. Får ju tänka på prestandan.
Lägger sen in alla bokstäver i alfabetet i en annan collection, "alp".
Sen loopar jag igenom "alp" och för varje bokstav så kolla jag om den bokstaven finns i "col".
Om den gör det så skapas en länk, annars inte.

Koden är .net 2 specifik och du måste inkludera namespacen.

using System.Text;
using System.Collections.Generic;

Och ja, mitt sätt är bra mycket bättre än det du tänkte använda.

sawMedlem sedan mars 20011 880 inlägg
#5

Nja jag ifrågarsätter inte det, som jag skrev det var ett okänt sätt att skriva på för mig.
Jag åker på patrull iallafall:

c:\inetpub\wwwroot\ASP_Net-Test\Vistext\Index.aspx.cs(14): The type or 
namespace name 'Generic' does not exist in the class or 
namespace 'System.Collections' (are you missing an assembly reference?)
cokMedlem sedan dec. 2005664 inlägg
#6

Kör du .NET 2.0? I tidgare versioner av .NET finns nämligen inte generics.

sawMedlem sedan mars 20011 880 inlägg
#7

Nej jag har VisualStudia 2003 (besvarar det din fråga?).

cokMedlem sedan dec. 2005664 inlägg
#8

Då får du skapa ett annat objekt istället för List. Typ en arraylist eller en vektor av strängar. Sen får du helt enkelt loopa igenom den istället...

sawMedlem sedan mars 20011 880 inlägg
#9

Varför skall det vara bättre än det jag gör nu???

cokMedlem sedan dec. 2005664 inlägg
#10

saw skrev:

Varför skall det vara bättre än det jag gör nu???

Ett litet exempel: hur många databasanrop gör du mer än Dino's kod? c:a 28!

sawMedlem sedan mars 20011 880 inlägg
#11

Nu har jag installerat Microsofts Visual Web Developer, och koden som Dino skrev till mig, fungerar helt superbt.
Tackar för alla tips och råd.

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