lavorando a occhi chiusi

di Marco Leoncini, in asp.net,
 in questi giorni sto lavorando ad un progetto di questo tipo:
"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 :)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese