Avatar billede Slettet bruger
22. januar 2003 - 09:34 Der er 7 kommentarer og
1 løsning

Lukke connection til database

Jeg har en access database som jeg bruger via en class. Jeg vil gerne lukke min database efter jeg har brugt den så aspnet_wp.exe ikke låser den. Så kan jeg ikke uploade den over ftp når jeg opdatere den :(
-----------------------------------------------------------
public class DataAccessDB
{
private string DataFile; //Hold database file
private OleDbConnection DBConn;
public DataAccessDB(string DBFile)
{
DataFile = DBFile;   
DBConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath(DataFile);
DBConn.Open();
}
public OleDbDataReader GetData(string SQL)
{
OleDbCommand DBCommand = new OleDbCommand(SQL, DBConn);
return DBCommand.ExecuteReader();
}
}
}
-----------------------------------------------------------
Det virker og hvordan jeg bruger den burde være indlysende. Hvordan får jeg undgået at den låser den så jeg ikke kan uploade og erstatte den med en anden.
Avatar billede burningice Nybegynder
22. januar 2003 - 09:50 #1
du skal sætte en CommandBehavior på din reader, på den måde bliver din connection lukket når readeren bliver lukket :)

public OleDbDataReader GetData(string SQL)
{
OleDbCommand DBCommand = new OleDbCommand(SQL, DBConn);
return DBCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
Avatar billede burningice Nybegynder
22. januar 2003 - 09:53 #2
måske du skulle overveje at bruge en adapter istedet... det er sjældent at man har brug for en reader, da man, ved hjælp af en adapter kan returner en DataTable og derefter løbe igennem alle rows. På den måde behøver du ikke at bekymre dig at åbne eller lukke databasen.
Avatar billede Slettet bruger
22. januar 2003 - 10:09 #3
jeg fortrækker datareader da jeg ligesom kender det fra gamle ASP dage, men et eksempel med adapter kunne være rart...

Den låser den stadig skal jeg bruge en anden connectionstring?
Avatar billede burningice Nybegynder
22. januar 2003 - 11:17 #4
din connectionstring er fin nok.. sørger du for at lukke din reader, før du åbner en ny?

Et lille eksempel på adatpter istedet:

public OleDbDataAdapter GetAdapter(string str)
{
OleDbDataAdapter objAdapter = new OleDbDataAdapter(str, objConn);

return objAdapter;
}

og når du skal bruge dine data'er bliver det noget i den her retning:

DataSet ds = new DataSet();
OleDbAdapter adapter = ditobject.GetAdapter("SELECT * FROM tabel");
adapter.Fill(ds);

foreach(DataRow dr in ds.Tables(0).Rows)
{
Response.Write dr["id"].ToString();
}


på denne måde slipper du for at åbne/lukke din connection i din db-klasse
Avatar billede guidmaster Nybegynder
22. januar 2003 - 11:55 #5
For at være på den sikker side skal du nok også lige huske at bruge Try Catch. I den forbindelse kan du så i din Finally sørge for at den bliver lukket. Din Finally bliver nemlig altid kørt :)
Avatar billede Slettet bruger
22. januar 2003 - 12:19 #6
Ja tak nu virkede det, cyberfrofessor ligger du lige et svar så du kan få nogle point?

Så må jeg lige kigge på det med OleDbAdapter
Avatar billede burningice Nybegynder
22. januar 2003 - 12:29 #7
svar :)
Avatar billede burningice Nybegynder
22. januar 2003 - 12:31 #8
blah
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