Gestione corretta di classi all'interno di un applicativo

giovedì 22 giugno 2006 - 00.48

squilibrio Profilo | Expert

Ciao a tutti, vorrei un vostro prezioso consiglio per capire se la mia attuale gestione delle classi pricipali è corretta all'interno di un'applicazione.

Classe per la gestione dell'accesso ai dati

Classe DB Manager


public class DBManager
{
public SqlConnection dbconn;
public OleDbConnection dbconnAccess;
public MainClass lmc = new MainClass();




public void RunStoredProcedure(string ProcName, SqlParameter[] pars)
{
....
}

public void RunSQL(string qryString)
{
OpenConn();
....
try
{
objCommand.ExecuteNonQuery();
}
catch (Exception objError)
{

}
finally
{
CloseConn();
}
}


public void OpenConn()
{
XmlNode node = lmc.GetConfigNode().SelectSingleNode("/DataSource[@DataSourceId='app']");
XmlAttributeCollection ac = node.Attributes;
dbconn = new SqlConnection(ac["Conn"].Value);
dbconn.Open();
}

public void CloseConn()
{
dbconn.Close();
}



public XmlNode GetConfigNode()
{
XmlDocument Node = new XmlDocument();
//Directory di esecuzione
Node.Load("C:\\app\\config.xml")
return Node;
}



MainClass principale che inizializza variabili e contiene una serie di metodi utili ai vari forms


public class MainClass : UserApplicationContext
{
[DllImport("kernel32.dll")]
private static extern bool Beep( int frequency, int duration );

public DBManager dbManager = new DBManager();

... variabili di applicazione


public MainClass(String StartApp)
{

String dataDir = Path.GetDirectoryName(Application.ExecutablePath);
if (!File.Exists (dataDir + @"\conf\app.ini"))
{
WriteParam(dataDir, .....
}
.......
GDataSource myData;
myData = new GDataSource(dbManager.GetConfigNode(), GdbyuzaName);
myData.Open();
GReader locRD = myData.ExecuteReader("SELECT ID FROM utenti.......");
if (locRD.Read())
idUser=getNumber(locRD["id"].ToString());
else
idUser=0;
......
}



public void FillXtraGrid(GridControl MyGrid, String SlqQuery, String GridName)
{
GDataSource db = new GDataSource(dbManager.GetConfigNode(), GdbyuzaName);
GAdapter myDataAdapter = new GAdapter(db, SlqQuery);
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet, GridName);
MyGrid.DataSource = myDataSet.Tables[0];
db.Close();
}


public Boolean VerificaCampo(Decimal Campo, String Tipo)
{
if (Tipo== ">")
{
if (getDecNumber(Campo) <= 0)
return false;
}
return true;
}

public String getDefMagaDescr()
{
....
GDataSource myd;
GReader myR;
myd = new GDataSource(dbManager.GetConfigNode(), GdbyuzaName);
myd.Open();
myR=myd.ExecuteReader("SELECT .....");
.....;
}


public int getNumber(int locNumero)
{
if (locNumero.ToString() == "")
return 0;
if (locNumero.ToString() == null)
return 0;

return locNumero;
}


public void ShowHelp(String FormName)
{
MessageBox.Show("Showing Help for " + FormName);
}

public void ShowSimpleMessage (String Messaggio)
{
MessageBox.Show(Messaggio);
}





In ogni form istanzio la mia MainClass e utilizzo i vari metodi


public class frmProva
{
private System.Windows.Forms.Label label7;
private System.Windows.Forms.ComboBox cboProva;
public MainClass ist = new MainClass();


ist.FillXtraGrid(gridDocumenti, strQuery, "Documenti");



Secondo voi è corretta una logica di questo tipo??

Soprattutto per quanto riguarda l'accesso ai dati?

Grazie

squilibrio Profilo | Expert

Graaaaaaazie. Che sollivevo! Credevo che la logica non fosse corretta

Per quando riguarda il DBManager, ho postato solo alcuni metodi, ne ho molti altri, anche quelli che hai indicato tu (EsecuzioneSP, EsecuzioneSQL, GetDataReader ecc....)

Per quanto riguarda il config, come dovrei farla??? Potresti dirmi la metodologia corretta??

Ultimo dubbio:


è corretto richiamare il nodo tutte le volte

dbManager.GetConfigNode()

(spero che non sia proprio sbagliato, in quanto non vorrei modificare tutto)

Intendo, in tutti i metodi (o in quasi tutti) c'è il caricamento del nodo:
myData = new ....(dbManager.GetConfigNode(),
GdbName);
....

DataSourcedb = new ...(dbManager.GetConfigNode(),
GdbName);

squilibrio Profilo | Expert

Ma quindi di cosa non avrei piu bisogno???

di questo metodo:

public void OpenConn()
{
XmlNode node = cls.GetConfigNode().SelectSingleNode("/DataSource[@DataSourceId='app']");
XmlAttributeCollection ac = node.Attributes;
dbconn = new SqlConnection(ac["Conn"].Value);
dbconn.Open();
}

oppure di questo:

public MainClass(String StartApp)
{

String dataDir = Path.GetDirectoryName(Application.ExecutablePath);
if (!File.Exists (dataDir + @"\conf\app.ini"))
{
WriteParam(dataDir, .....
}



????????

Non capisco come modificare l'attuale situazione!

Grazie mille!

squilibrio Profilo | Expert

Grazie per i suggerimenti!

Ho solo un problema ora

Nel mio file dbconfig.xml avevo


<DataSources>

<DataSource DataSourceId="nixor" DataProviderId="SQLSERVER" ...... />

<DataSource DataSourceId="stampe" DataProviderId="OLEDB" .... />


</DataSources>


<DataProviders>



<DataProvider DataProviderId="SQLSERVER" ParamPrefix="@"
Assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
ProviderNS = "System.Data.SqlClient" ProviderPrefix ="Sql"/>
<DataProvider DataProviderId="ODBC" ParamPrefix="" Description="ODBC"
Assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
ProviderNS = "System.Data.Odbc" ProviderPrefix ="Odbc" />
<DataProvider DataProviderId="OLEDB" ParamPrefix="" Assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Description="OleDb"
ProviderNS = "System.Data.OleDb" ProviderPrefix ="OleDb"/>
<DataProvider DataProviderId="ORACLE" ParamPrefix="" CustomInfo="PLSQLRSET"
Assembly="System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
ProviderNS = "System.Data.OracleClient" ProviderPrefix ="Oracle"/>
<DataProvider DataProviderId="SYBASE" ParamPrefix="" Assembly="Sybase.Data.AseClient"
ProviderNS = "Sybase.Data.AseClient" ProviderPrefix ="Ase"/>
<DataProvider DataProviderId="MYSQL" ParamPrefix="" Assembly="ByteFX.MySqlClient" Description="MySql"
ProviderNS = "ByteFX.Data.MySqlClient" ProviderPrefix ="MySql"/>

</DataProviders>



Poi.....


public void OpenConn()
{
XmlNode node = GetConfigNode().SelectSingleNode("/MaxVirtual/DataSources/DataSource[@DataSourceId='nixor']");
XmlAttributeCollection ac = node.Attributes;
dbconn = new SqlConnection(ac["DefConnStr"].Value);
dbconn.Open();
}


questo lo modifico con

public void OpenConn()
{
string connstring = Configuration.AppSettings["ChiaveDelMioAppConfig"]

dbconn = new SqlConnection(connstring);
dbconn.Open();
}



E con questo dovrei essere OK per la connessione al DB

Ma cosa inserisco nel mio nuovo file app.config??? (in funzione del mio vecchio dbconfig.xml non piu utilizzato)

Se quanto scritto è corretto, come devo modificare/creare il mio app.config??

Grazie ancora

squilibrio Profilo | Expert

Un aiutino please

vorrei capire come sistemare al meglio il mio problemino

squilibrio Profilo | Expert

Grazie, ho creato il file xml in questo modo

<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>

<DataSource Name="Nome1" ParamPrefix="@" ConnectionString="uid=sa;pwd=xxxxxx;server=SRV\SQLEXPRESS;Trusted_Connection=true;database=Nixor" providerName="System.Data.SqlClient" />

<DataSource Name="Nome2" ParamPrefix="@" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db\dbmdb" providerName="System.Data.OleDb" />

</connectionStrings>


Ma in VS mi viene segnalato un errore sul primo data source

the element connectionstring has invalid child element DataSource


Io vorrei fare in modo di poter utilizzare la connessione presente nel file xml in questo modo:

string connectionstring = Configuration.AppSettings["Nome1"];
dbconn = new SqlConnection(connectionstring);


Grazie mille
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5