Homa Page di Daniele Franceschini
Piccola classe per la gestione di MS-SQL. Include anche una classe per la gestione dell'errore
Ovviamente questo non è il migliore codice che si possa realizzare per la gestione di una connessione e relative interrogazioni al database, però può essere utilizzata come spunto dal quale partire per i propri programmi.
namespace MYERROR{
//Piccola classe per la gestione dell'errore
public class clWSError
{
internal int code=0;
/// <summary>Codice dell'errore.</summary>
public int Code
{
get {return code;}
}
internal int severity=0;
/// <summary>Indica con un intero il grado di severità dell'errore.</summary>
public int Severity
{
get {return severity;}
}
internal string description="";
/// <summary>Descrizione dell'errore.</summary>
public string Description
{
get {return description;}
}
internal string descriptionExtended="";
/// <summary>Descrizione estesa dell'errore.</summary>
public string DescriptionExtended
{
get {return descriptionExtended;}
}
/// <summary>Metodo per la raccolta dell'errore creatisi nella metodo</summary>
internal void catchError (Exception Error)
{
code = 0;
severity = 0;
description = Error.Message.ToUpper();
descriptionExtended = "";
}
}
}
namespace DBMSSQL{
/// <summary>Classe che si occupa di utilizzare il DB MSSQL SERVER</summary>
public class clDB
{
//--Ovviamente queste righe di codice vanno reipostate secondo l'esigenza--
const string DB = "NomeDB"; //DataBase di test
const string DBServer ="NomeServer"; //Server di Test
internal const string cnStr = "User ID=Utente;Initial Catalog=" + DB
+ ";Data Source=" + DBServer;
//-------------------------------------------------------------------------
/// <summary>ArrayList per la raccolta delle query da inviare al DB</summary>
internal ArrayList Queries = new ArrayList();
/// <summary>Metodo per l'accumulo delle query da inviare al DB in modo transazionale.
/// </summary>
/// <param name="sSql">Istruzione SQL</param>
/// <remarks>Le query che vengono passate a questo metodo sono memorizzate
/// ma non inviate al DB.
/// Per inviare la query passate a questo metodo, <b>è necessario chiamre il metodo
/// ExecTransactSQL</b></remarks>
public void addQuery(string sSql)
{
Queries.Add(sSql);
}
/// <summary>Metodo per l'apertura di una connessione verso il DB.</summary>
/// <param name="cnStr">Stringa di connessione</param>
/// <returns>Restituisce una connesione aperta.</returns>
public SqlConnection OpenConnection(string cnStr)
{
SqlConnection myCn = new SqlConnection();
try
{
myCn.ConnectionString = cnStr;
myCn.Open();
}
catch (Exception e)
{
throw(e);
}
return myCn;
}
/// <summary>
/// Chiude la connessione
/// </summary>
/// <param name="cn"></param>
public void CloseConnection(SqlConnection cn)
{
if (cn.State == ConnectionState.Open)
cn.Close();
}
/// <summary>Esegue tutte le query (in modo transazionale), accumulate attraverso il
/// metodo addQuery(string sSql)</summary>
/// <param name="obj">Puntatore all'oggetto</param>
/// <param name="cn">Connessione aperta</param>
/// <remarks>Se le query non sono state memorizzate attraverso il metodo addQuery, il
/// presente metodo non deve essere chiamato.</remarks>
/// <returns>Restituisce true se la transazione è andata a buon fine.</returns>
public Boolean ExecTransactSQL(clWSConsorzio obj, SqlConnection cn)
{
Boolean b_Esito;
if(Queries.Count > 0)
{
SqlCommand myCmd = new SqlCommand();
SqlTransaction myTrans = cn.BeginTransaction();
try
{
myCmd.Transaction = myTrans;
myCmd.Connection = cn;
int i = 0;
for (i = 0; i < Queries.Count; i++)
{
myCmd.CommandText = Queries[i].ToString();
myCmd.ExecuteNonQuery();
}
Queries.Clear();
myTrans.Commit();
b_Esito = true;
}
catch (Exception e)
{
myTrans.Rollback();
Queries.Clear();
throw(e);
}
}
else
{
obj.Error.code = 1;
obj.Error.description = "ExecTransactSQL Error";
obj.Error.descriptionExtended = "Per usare questo metodo è necessario
valorizzare l'array Queries";
obj.Error.severity = 10;
b_Esito = false;
}
return b_Esito;
}
/// <summary>
/// Esegue un comando slq e restituisce il risultato
/// </summary>
/// <param name="sSql"></param>
/// <param name="cn"></param>
/// <returns></returns>
public SqlDataReader RunReadOnlySQL(string sSql, SqlConnection cn)
{
SqlDataReader dr;
using (SqlCommand myCmd = new SqlCommand())
{
try
{
myCmd.Connection = cn;
myCmd.CommandText = sSql;
dr = myCmd.ExecuteReader();
}
catch (Exception e)
{
throw(e);
}
}
return dr;
}
/// <summary>
/// Esegue un comando slq e restituisce il risultato
/// </summary>
/// <param name="sSql"></param>
/// <param name="cn"></param>
/// <returns></returns>
public DataTable RunSQL(string sSql, SqlConnection cn)
{
SqlDataAdapter da = new SqlDataAdapter(sSql,cn);
DataSet ds = new DataSet();
if (cn.State != System.Data.ConnectionState.Open)
{
cn.Open();
}
try
{
da.Fill(ds);
}
catch (Exception e)
{
throw(e);
}
if (cn.State != System.Data.ConnectionState.Closed)
{
cn.Close();
cn.Dispose();
}
return ds.Tables[0];
}
}
}



