Avatar billede 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.
Avatar billede 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
Avatar billede nielle Nybegynder
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);
Avatar billede arne_v Ekspert
26. januar 2006 - 15:34 #3
mangler du ikke at kalde  dbOmraaderReader.Read() ?
Avatar billede Slettet bruger
27. januar 2006 - 08:57 #4
dbOmraaderReader finder flere steder. Hvor helt nøjagtigt skal det kaldes dbOmraadeReader.Read()    ?
Avatar billede nielle Nybegynder
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.
Avatar billede Slettet bruger
27. januar 2006 - 10:48 #6
Fejlmeddelsen siger den mangler et ; i denne linie... :-|

dirName Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString());
Avatar billede nielle Nybegynder
27. januar 2006 - 11:04 #7
Min fejl:

dirName = Path.Combine(dirName, dbOmraaderReader.GetInt32(0).ToString());
Avatar billede Slettet bruger
27. januar 2006 - 11:08 #8
Samme linie, ny fejl...

System.InvalidOperationException: Der findes ingen data for rækken eller kolonnen.
Avatar billede nielle Nybegynder
27. januar 2006 - 11:20 #9
Det lyder jo som om at der slet ikke er nogen data i din huse-tabel?
Avatar billede 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.
Avatar billede 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?)
Avatar billede Syska Mester
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());
Avatar billede nielle Nybegynder
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...
Avatar billede arne_v Ekspert
27. januar 2006 - 18:34 #14
maaske

if(dbOmraaderReader.Read())
{
  // fortsaet
}
else
{
  // goer noget grimt
}
Avatar billede 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 >:-(
Avatar billede nielle Nybegynder
30. januar 2006 - 12:36 #16
Post din kode - ellers har vi jo ikke rigtigt noget at gå efter.
Avatar billede nielle Nybegynder
30. januar 2006 - 12:37 #17
... jeg mente selvfølgeligt "noget mere af din kode" :^)
Avatar billede 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);
}
Avatar billede nielle Nybegynder
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. :^)
Avatar billede 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... :-|
Avatar billede 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.
Avatar billede nielle Nybegynder
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";
Avatar billede Slettet bruger
30. januar 2006 - 15:45 #23
Ja Nemlig Ja! Nu ER den der! Lige som det skal være ;-D
Avatar billede nielle Nybegynder
30. januar 2006 - 16:26 #24
Jamen, så lægger jeg lige et svar :^)

Vent også lige på arne_v :^)
Avatar billede nielle Nybegynder
30. januar 2006 - 16:27 #25
... og det var jo så et svar ...
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
30. januar 2006 - 16:47 #27
"eller endnu bedre" skal læses som "eller som noget der virker"
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

IT-JOB

Nextway Software A/S

Product Configuration Specialist

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Netværksteknikere til design, drift og vedligehold ved Cyberdivisionen

Ringkjøbing Landbobank – Nordjyske Bank

Forretningsudvikler til procesoptimering

Lægemiddelstyrelsen

Løsningsarkitekt