SqlConnections/SqlDataReader låsnings problem.
Hejsa.Har følgende problem, som er lidt langhåret at forklare...
Har denne void i en klasse jeg kalder for "functions".
public SqlDataReader SSDR(String sqltext, SqlConnection Conn)
{
SqlCommand cmd;
cmd = new SqlCommand(sqltext, Conn);
SqlDataReader RSDR = cmd.ExecuteReader();
return RSDR;
}
Conn er en SqlConnection som jeg statisk har oprettet på den første form mit program loader. På denne form har jeg pt. 20 statiske SqlConnections.
Dvs. når jeg skal udføre en SQL forespørgelse, så foregår det normalt sådan her :
--------------
SqlDataReader Reader1 = functions.SSDR("select * from tabel", frmmain.SqlConn1);
While (Reader1.read())
{
loop igennem resultat
}
Reader1.Close();
------------
Problemet med dette er at "frmmain.SqlConn1" er låst til den SqlDataReader lige indtil jeg kører "Reader1.Close()";
Det er irriterende, da jeg nogle gange kører sqlforespørgelser inde i et loop, eller kalder en funktion inde i et loop. I den funktion jeg så kalder, er der nogle gange også et Sql loop der skal køres igennem, og i dette loop kaldes så andre funktioner som igen laver forespørgelser.
Og da dette foregår på kryds og tværs i hele programmet, bliver det hurtigt forvirrende og uoverskueligt, og med risiko for programfejl.
Jeg har forsøgt at oprette en SqlConnection direkte inde i SSDR void'en men hvis jeg gør det, så kan jeg kun få denne sqlconnection lukket igen inde fra samme funktion. Og hvis jeg lukker den igen, så kan jeg ikke retunere og læse den SqlDataReader, som jeg forsøger.
Hvad pokker gør man?
Jeg kan selvfølgelig helt droppe min SSDR funktion og oprette og køre SQL forespørgelserne direkte, men det ville jeg nødt gøre.
Kan det på nogen måde lade sig gøre at retunere både SqlConnection'en og SqlDataReaderen fra functions.SSDR() void'en.
Problemet er nemlig at hvis jeg ikke får lukket en SqlConnection igen, så løber jeg meget hurtigt ind i max antal af åbne SQL forbindelser.
Og det kan vel heller ikke passer at man skal have 20 åbne samtidige forbindelser til en SQL server eller?
Og hvis det ikke kan lade sig gøre at retunere SqlConnection sammen med SqlDataReaderen, kan må så på en måde undgå at en SqlConnection bliver låst til en SqlDataReader? Hvis man kan det, så er mit problem også løst.
Håber en kan hjælpe mig ud af denne klemme.
/Lasse
