Avatar billede jensen2005 Nybegynder
17. oktober 2005 - 11:52 Der er 5 kommentarer og
1 løsning

Speciel opdatering af DB (Måske datareader vs. datareader )

Hej eksperter

Til et lille CMS-system er jeg ved at lave en ”slet menupunkt funktion”. Efter man har slettet et menupunkt opdateres rækkefølgen som de vises (Se kode eksempel). Mit spørgsmål er om dette kan gøres på en smartere måde – for på den måde som jeg her bruger åbner man jo en connection til databasen flere gange!. Burde man i stedet bruge dataset hvad ville i gøre?.

Mvh Jensen2005

Kode eksempel: 
//om nummerere de andre punkter
   
string dbStringomnummer;
OleDbConnection omnummerCon;
OleDbDataReader myDataReader;
dbStringomnummer = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("../db/hjemmesideinfo.mdb");
   
omnummerCon = new OleDbConnection(dbStringomnummer);
omnummerCon.Open();
OleDbCommand omnummerCmd = new OleDbCommand("SELECT Key FROM hovedmenu ORDER BY rekkefolge",omnummerCon);
   
myDataReader = omnummerCmd.ExecuteReader();
int i = 0;
while ( myDataReader.Read() )
{
string dbStringomnummerer;
OleDbConnection omnummererCon;
dbStringomnummerer = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("../db/hjemmesideinfo.mdb");
   
omnummererCon = new OleDbConnection(dbStringomnummerer);
omnummererCon.Open();
OleDbCommand omnummererCmd = new OleDbCommand("UPDATE hovedmenu SET rekkefolge="+i+" WHERE Key= "+myDataReader[ "key" ].ToString()+"",omnummererCon);
omnummererCmd.ExecuteNonQuery();
omnummererCon.Close();
i++;
}
myDataReader.Close();
omnummerCon.Close();
Avatar billede arne_v Ekspert
17. oktober 2005 - 12:06 #1
du kan godt bruge den samme connection til alle UPDATE (men du skal have
2 connections en til SELECT og en til UPDATE)

og så synes jeg at koden ville være nemmere at læse med to navne på connections
som var lidt mere forskellige
Avatar billede jensen2005 Nybegynder
17. oktober 2005 - 13:03 #2
Sådan som det står i det ovenstående, åbner man så ikke en connection hver gang man "går" igennem while-løkken??..

Skal man flytte noget af det, der står i while løkken udenfor sådan at while-løkken ser sådan ud:

while ( myDataReader.Read() )
    {
    OleDbCommand omnummererCmd = new OleDbCommand("UPDATE undermenu SET rekkefolge="+i+" WHERE Key= "+myDataReader[ "key" ].ToString()+"",omnummererCon);

    omnummererCmd.ExecuteNonQuery();
   
   
   
    i++;
   
 
    }
Avatar billede arne_v Ekspert
17. oktober 2005 - 13:07 #3
jo

men det er ikke nødvendigt
Avatar billede arne_v Ekspert
17. oktober 2005 - 13:10 #4
OleDbConnection selcon = new OleDbConnection("...");
selcon.Open();
OleDbConnection updcon = new OleDbConnection("...");
updcon.Open();
OleDbCommand selcmd = new OleDbCommand("...", selcon);
OleDbDataReader rdr = selcmd.ExecuteReader();
while(rdr.Read())
{
    OleDbCommand updcmd = new OleDbCommand("...", updcon);
    updcmd.ExecuteNonQuery();
}
rdr.Close();
selcon.Close();
updcmd.Close();
Avatar billede jensen2005 Nybegynder
17. oktober 2005 - 14:42 #5
Ok tak for hjælpen - så lærte jeg jeg også lidt i dag - Opret et svar så du kan få dine point. Mvh..
Avatar billede arne_v Ekspert
17. oktober 2005 - 14:44 #6
svar
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
Kurser inden for grundlæggende programmering

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