Slettet bruger
26. januar 2006 - 11:10
Der er
26 kommentarer og 1 løsning
Oprette en mappe i en mappe.
Sidder i øjeblikket og arbejder med en sommerhusportal. Når kunden opretter en profil skal nedenstående script oprette en mappe ved ud fra det ID brugeren får i databasen. Denne mapper skal oprettes som en undermappe i en mappe kaldet brugerimg. cmd = new OleDbCommand(); cmd.CommandText = "SELECT TOP 1 ID FROM HUSE;"; cmd.Connection = dbConn; OleDbDataReader dbUdvalgteReader, dbSenesteReader, dbOmraaderReader; dbOmraaderReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); System.IO.Directory.CreateDirectory(Server.MapPath <-- Fejl(dbOmraaderReader.GetInt32(0).ToString())); Fejlmeddelsen: System.InvalidOperationException: Der findes ingen data for rækken eller kolonnen.
Annonceindlæg fra Pointsharp
Slettet bruger
26. januar 2006 - 11:12
#1
Gik vist ged i det før. Her er en mere overskuelig fejlmeddelse... System.IO.Directory.CreateDirectory(Server.MapPath(dbOmraaderReader.GetInt32(0).ToString())); <------ Fejlmeddelsen
26. januar 2006 - 11:30
#2
Brugen af Server.MapPath() forudsætter at filen/mappen allerede findes. Prøv om dette ikke virker bedre: string dirName = Server.MapPath("/"); dirName Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString()); System.IO.Directory.CreateDirectory(dirName);
26. januar 2006 - 15:34
#3
mangler du ikke at kalde dbOmraaderReader.Read() ?
Slettet bruger
27. januar 2006 - 08:57
#4
dbOmraaderReader finder flere steder. Hvor helt nøjagtigt skal det kaldes dbOmraadeReader.Read() ?
27. januar 2006 - 10:33
#5
Umiddelbart før at du bruger resultater fra den: cmd = new OleDbCommand(); cmd.CommandText = "SELECT TOP 1 ID FROM HUSE;"; cmd.Connection = dbConn; OleDbDataReader dbUdvalgteReader, dbSenesteReader, dbOmraaderReader; dbOmraaderReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); dbOmraaderReader.Read(); string dirName = Server.MapPath("/"); dirName Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString()); System.IO.Directory.CreateDirectory(dirName); Normalt ser man .Read() brugt i forbindelse med en while-løkke, når der kan være et variabelt antal resultater: while (dbOmraaderReader.Read()) { Consowl.WriteLine(dbOmraaderReader.GetInt32(0).ToString()); } Men når man ved at der er præcist een række så er der ingen grund til selve while'en.
Slettet bruger
27. januar 2006 - 10:48
#6
Fejlmeddelsen siger den mangler et ; i denne linie... :-| dirName Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString());
27. januar 2006 - 11:04
#7
Min fejl: dirName = Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString());
Slettet bruger
27. januar 2006 - 11:08
#8
Samme linie, ny fejl... System.InvalidOperationException: Der findes ingen data for rækken eller kolonnen.
27. januar 2006 - 11:20
#9
Det lyder jo som om at der slet ikke er nogen data i din huse-tabel?
Slettet bruger
27. januar 2006 - 12:14
#10
Lyder underligt! Tabellen er pænt fyldt op! Attributten ID er sat til autonummering så den står der altid noget i.
Slettet bruger
27. januar 2006 - 12:21
#11
Glemte at sige at denne linie kan den heller ikke lide: Consowl.WriteLine(dbOmraaderReader.GetInt32(0).ToString()); Typen eller navneområdenavnet 'Consowl' kunne ikke findes (mangler der et 'using'-direktiv eller en assemblyreference?)
27. januar 2006 - 14:13
#12
hehe, nielle har nok skrevet forkert... Consowl.WriteLine(dbOmraaderReader.GetInt32(0).ToString()); Ret til: Console.WriteLine(dbOmraaderReader.GetInt32(0).ToString());
27. januar 2006 - 17:37
#13
Ok, jeg fik godt nok skrevet forkert - men det var nu heller ikke ment som noget du selv skulle skrive: Derimod var det bare en demonstration af at man som regel så kaldet til .Read() i forbindelse med en while-løkke. Du skulle kun skrive dette: cmd = new OleDbCommand(); cmd.CommandText = "SELECT TOP 1 ID FROM HUSE;"; cmd.Connection = dbConn; OleDbDataReader dbUdvalgteReader, dbSenesteReader, dbOmraaderReader; dbOmraaderReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); dbOmraaderReader.Read(); string dirName = Server.MapPath("/"); dirName Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString()); System.IO.Directory.CreateDirectory(dirName); Denne kodestump bruges hvis der netop er én række i databasen som opfyldte søgekriteriet...
27. januar 2006 - 18:34
#14
maaske if(dbOmraaderReader.Read()) { // fortsaet } else { // goer noget grimt }
Slettet bruger
30. januar 2006 - 12:33
#15
dirName Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString()); Fejlmeddelelse om kompileringsfunktion: CS1002: ; var forventet Hader den slags fejlmeddelser, det betyder det ka' være hvad som helst >:-(
30. januar 2006 - 12:36
#16
Post din kode - ellers har vi jo ikke rigtigt noget at gå efter.
30. januar 2006 - 12:37
#17
... jeg mente selvfølgeligt "noget mere af din kode" :^)
Slettet bruger
30. januar 2006 - 13:36
#18
private void opret(object sender, System.EventArgs e) { string password = CreateRandomPassword(5); MailMessage mail = new MailMessage(); mail.To = Session["mail"].ToString(); mail.From = ""; mail.Subject = ""; mail.Body = " " + password; try { SmtpMail.SmtpServer = "xxx.dk"; SmtpMail.Send(mail); } catch(Exception ex) { } OleDbConnection dbConn; OleDbCommand cmd; dbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("database/ns.mdb")+";"); dbConn.Open(); string sql; if (Session["omraadeny"]=="ja"); { sql = "Insert into huse (navn,) values();"; sql = "Insert into huse ([navn]) values('" + Session["navn"].ToString();"; cmd = new OleDbCommand(sql, dbConn); cmd.ExecuteNonQuery(); } cmd = new OleDbCommand(); cmd.CommandText = "SELECT TOP 1 ID FROM HUSE;"; cmd.Connection = dbConn; OleDbDataReader dbUdvalgteReader, dbSenesteReader, dbOmraaderReader; dbOmraaderReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); dbOmraaderReader.Read(); string dirName = Server.MapPath("brugerimg/"); dirName Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString()); System.IO.Directory.CreateDirectory(dirName); }
30. januar 2006 - 13:47
#19
Du har et ; tegn for meget i slutningen af denne linje; if (Session["omraadeny"]=="ja"); Du har en "; sekvens for meget i slutningen af denne linje: sql = "Insert into huse ([navn]) values('" + Session["navn"].ToString();"; Du mangler et = tegn i denne (se 27/01-2006 11:04:39): dirName Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString()); Hvis du retter de tre fejl, så burde det kompilere. :^)
Slettet bruger
30. januar 2006 - 14:09
#20
Du har ret mht. at det kompilere med fejlene rettet. Der er bare EN ikke ubetydelig fejl: Mappen som skal oprettes i "brugerimg" bliver slet ikke oprettet... :-|
Slettet bruger
30. januar 2006 - 14:36
#21
Ups! Jeg var vist lige en tand for hurtigt dér! 8-| Mappen BLIVER oprettet, men bliver opkaldt efter det første nummer i attributten ID. Mappen skal selvfølgelig opkaldes efter det seneste ID.
30. januar 2006 - 14:43
#22
Det skyldes at det faktisk er netop det ID som du udtrækker med din SQL cmd.CommandText = "SELECT TOP 1 ID FROM HUSE;"; Prøv med: cmd.CommandText = "SELECT TOP 1 id FROM huse ORDER BY id DESC"; - eller endnu bedre: cmd.CommandText = "SELECT @@Identity FROM huse";
Slettet bruger
30. januar 2006 - 15:45
#23
Ja Nemlig Ja! Nu ER den der! Lige som det skal være ;-D
30. januar 2006 - 16:26
#24
Jamen, så lægger jeg lige et svar :^) Vent også lige på arne_v :^)
30. januar 2006 - 16:27
#25
... og det var jo så et svar ...
30. januar 2006 - 16:42
#26
jeg melder pas paa trods af at jeg synes at fejlen drejede sig om Read kaldet så var det jo ikke det som det kom til at dreje sig om
30. januar 2006 - 16:47
#27
"eller endnu bedre" skal læses som "eller som noget der virker"
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.