Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Gestione corretta di classi all'interno di un applicativo
giovedì 22 giugno 2006 - 00.48
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
gio 22 giu 2006 - 00:48
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
527
messaggi | Data Invio:
gio 22 giu 2006 - 23:17
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
527
messaggi | Data Invio:
ven 23 giu 2006 - 12:14
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
527
messaggi | Data Invio:
sab 24 giu 2006 - 14:22
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
527
messaggi | Data Invio:
lun 26 giu 2006 - 16:23
Un aiutino please
vorrei capire come sistemare al meglio il mio problemino
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
mar 27 giu 2006 - 12:27
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
Torna su
Stanze Forum
Elenco Threads
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 !