"dobbiamo recuperare alcuni dati da alcuni db" niente altro, il db di origine non è chiaro, potrebbe essere Sybase, Oracle o Sql i dati da estrarre non sono stati decisi, sono dati storici ma per il resto buio.
bene le premesse per non cavare un ragno dal buco ci sono tutte.
quindi mi sono messo a ragionarci un pò su, sono più bravo a "spippolare" cha a progettare ma stavolta dovevo trattenermi :).
ho iniziato scritto una classe astratta per l'accesso hai dati (il libro di bellinaso mi è stato d'aiuto) utilizzando solo interfacce, un piccolo esempio:
public QueryBuilderHelper(IDataAccessFactory _DataAccessFactory, string _ConnectionString) { //imposto la factory per l'accesso hai dati _Data= _DataAccessFactory; //recupero un istanza dell'oggetto Connection _Connection = _Data.GetConnection(); //imposto la stringa di connessione _Connection.ConnectionString = _ConnectionString; } private IDbCommand BuildQueryCommand (string _Query, IDataParameter [] parameters) { IDbCommand _Command = _Data.GetCommand(); _Command.CommandText = _Query; _Command.Connection = _Connection; _Command.CommandType = CommandType.Text; foreach (IDataParameter parameter in parameters) { _Command.Parameters.Add (parameter); } return _Command; } protected DataSet RunProcedure(string _Query, IDataParameter[] parameters) { DataSet dataSet = new DataSet(); _Connection.Open(); IDbDataAdapter _DataAdapter = _Data.GetAdapter(); _DataAdapter.SelectCommand = BuildQueryCommand(_Query, parameters); _DataAdapter.Fill(dataSet); _Connection.Close(); return dataSet; }
ho inoltre definito un interfaccia utilizzata come parametro del costruttore della classe QueryBuilderHelper
public interface IDataAccessFactory { IDbConnection GetConnection(); IDbCommand GetCommand(); IDataParameter GetParameter(); IDataReader GetReader(); IDbDataAdapter GetAdapter(); }
il passo successivo è creare oggetti concreti che implementino l'interdaccia IDataAccessFactory ecco alcuni frammenti di codice:
public AsaAccesFactory() { Assembly assembly = Assembly.LoadFrom(@"C:\Programmi\Sybase\SQL Anywhere 9\win32\iAnywhere.Data.AsaClient.dll"); Type[] _Types = assembly.GetTypes(); foreach(Type _T in _Types) { if(_T.GetInterface("IDbConnection") != null) { _ConnectionType = _T; } if(_T.GetInterface("IDbCommand") != null) { _CommandType = _T; } if(_T.GetInterface("IDbCommand") != null) { _CommandType = _T; } if(_T.GetInterface("IDbDataAdapter") != null) { _DataAdapterType = _T; } } public System.Data.IDbDataAdapter GetAdapter() { if(_DataAdapterType != null) { return (System.Data.IDbDataAdapter)Activator.CreateInstance(_DataAdapterType); } else { throw new ArgumentNullException("_DataAdapterType","Impossibile creare un istanza"); } } }
carico l'assebly (che prenderò da un file xml nella versione finale), in quanto versioni differenti di sybase magari potrebbe avere la dll in percorsi differenti, cerco i tipi che inplementano le interfaccie che mi interessano. e quando richiesto credo un istanza.
il passo successivo è salvare le query (perche non so ancora ne nomi di tabelle ne tantomeno i nomi delle colonne) un file xml e criptarlo a dovere :)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Modificare il controllo TreeView, il 2 dicembre 2008 alle 19:27
- Perfezioniamo il ProfileDataSorce, il 13 ottobre 2008 alle 11:14
- Un DataSource per il Profile, il 10 ottobre 2008 alle 15:06
- TrueSpace 7 gratuito, il 24 luglio 2008 alle 10:59
- adesso dico la mia sull'Iphone, il 22 luglio 2008 alle 10:33
- Come tutto ebbe inizio, il 21 luglio 2008 alle 09:22