Connessione al Database

giovedì 02 agosto 2012 - 12.53
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010  |  Access (.mdb)

paolo973 Profilo | Senior Member

ho scritto un file funzioni.cs ed inserito nella cartella App_Code.

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Xml.Serialization;

public class funzioni: System.Web.UI.Page
{
public OleDbDataReader recuperaDataByQuery(string query)
{
String connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("mdb-database/mydb.mdb");
OleDbConnection cn = new OleDbConnection(connString);
cn.Open();
OleDbCommand cmd = new OleDbCommand(query, cn);
OleDbDataReader aReader = cmd.ExecuteReader();
// cn.Close();
return aReader;
}
}

l'unico metodo implementato è recuperaDataByQuery.
Questo metodo deve accettare una query (ad esempio Select * from mytb ...) e ritornarmi tutti i dati trovati.

la mia domanda è:
la connessione cn al database resta aperta?
se la chiudo prima del return ottengo
Exception Details: System.InvalidOperationException: Invalid attempt to call Read when reader is closed.

cosa è meglio fare?



Fractals Profilo | Newbie

Ciao, non sono un grande esperto di vb.net e come te sto imparando però ti posso che la connessione deve rimanere aperta per poter interrogare il datareader altrimenti esso non è piu disponibile...

Se vuoi lavorare con i dati "off-line" devi usare i dataset e datatable...

oppure costruisci una classe connecciot che inizializzando l'oggetto effettui la connessione, setta una proprietà della classe come instanza di connessione in modo che sia sempre disponibile (ovvero cio che ritorna dal metodo conneccion) e infine il metodo disconnessione che invochi sono quando hai finito di fare tutto

alx_81 Profilo | Guru

>la mia domanda è:
>la connessione cn al database resta aperta?
la connessione col database, col codice scritto, resta aperta e non è una prassi da seguire. La connessione dovrebbe in questi casi rimanere aperta solo per il tempo durante il quale contatti il database.
Quindi solo per il tempo dell'esecuzione della query. Poi andrebbe chiusa quanto prima.
Di certo ti consiglio di usare la USING (C#):
http://msdn.microsoft.com/en-us/library/yh598w02.aspx

La using, gestisce in autonomia close e dispose della connessione.
Utilizza sempre quello statement quando gestisci accesso I/O file e connessioni.

ciao
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5