Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRÉER UNE APPLICATION INDÉPENDANTE À LA BASE DE DONNÉES


Information sur la source

Catégorie :Base de données Source .NET ( DotNet ) Classé sous : basededonnées, indépendance, découpler, fournisseurdedonnées, fournisseur Niveau : Débutant Date de création : 16/06/2006 Date de mise à jour : 28/03/2008 15:51:12 Vu : 8 764

Note :
5,67 / 10 - par 3 personnes
5,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

Voilà une classe avec une méthode qui vous permet de créer les objets nécessaire pour exploiter une base de données quelconque.

C'est une classe que j'ai utilisé pour un projet. elle est simple à utiliser et à adapter.
si vous ne comprenez pas quelque chose, n'hésitez pas à me demander.

 

Source

  • using System;
  • using System.Collections.Generic;
  • using System.Text;
  • using System.Configuration;
  • using System.Data.Common;
  • using System.Data;
  • namespace CrmDbClient
  • {
  • public class CrmDbClientException:Exception
  • {
  • public CrmDbClientException(string Message):base(Message){}
  • public CrmDbClientException(string Message, Exception inerException) : base(Message, inerException) { }
  • }
  • public class CrmDbClient : IDisposable
  • {
  • private IDbConnection _DbConnection;
  • private IDbCommand _DbCommand;
  • private ConnectionStringSettings _DbConnectionString;
  • private DbProviderFactory _DbFactory = null;
  • private IDbTransaction _DbTransaction = null;
  • private IDbDataAdapter _DbDataAdapter = null;
  • /// <summary>
  • /// Creates a new instance of CRMDbClient
  • /// </summary>
  • /// <param name="CurrentConnectionString"></param>
  • public CrmDbClient(ConnectionStringSettings CurrentConnectionString)
  • {
  • _DbConnectionString = CurrentConnectionString;
  • _DbFactory = DbProviderFactories.GetFactory(CurrentConnectionString.ProviderName);
  • _DbConnection = _DbFactory.CreateConnection();
  • _DbConnection.ConnectionString = CurrentConnectionString.ConnectionString;
  • _DbCommand = _DbConnection.CreateCommand();
  • _DbDataAdapter = _DbFactory.CreateDataAdapter();
  • _DbDataAdapter.SelectCommand = _DbCommand;
  • OpenConnection();
  • }
  • /// <summary>
  • /// Destroy the current instance
  • /// </summary>
  • public void Dispose()
  • {
  • CloseConnection();
  • _DbCommand.Dispose();
  • _DbConnection.Dispose();
  • _DbConnectionString = null;
  • _DbDataAdapter = null;
  • _DbFactory = null;
  • _DbTransaction = null;
  • }
  • ~CrmDbClient()
  • {
  • GC.Collect();
  • }
  • #region Properties
  • /// <summary>
  • /// Gets or sets the command timeout in seconds
  • /// </summary>
  • public int CommandTimeout
  • {
  • get { return _DbCommand.CommandTimeout; }
  • set { _DbCommand.CommandTimeout = value; }
  • }
  • /// <summary>
  • /// Gets the database provider
  • /// </summary>
  • public string DataBaseProvider
  • {
  • get{return _DbConnectionString.ProviderName;}
  • }
  • /// <summary>
  • /// Gets or set the
  • /// </summary>
  • public int ConnectionTimeout
  • {
  • get { return _DbConnection.ConnectionTimeout; }
  • }
  • #endregion
  • /// <summary>
  • /// Begins transaction
  • /// </summary>
  • public void BeginTransaction()
  • {
  • _DbCommand.Transaction = _DbTransaction = _DbConnection.BeginTransaction();
  • }
  • /// <summary>
  • /// Commit transaction
  • /// </summary>
  • public void CommitTransaction()
  • {
  • if (_DbTransaction != null)
  • {
  • _DbTransaction.Commit();
  • _DbTransaction.Dispose();
  • _DbTransaction = null;
  • _DbCommand.Transaction = null;
  • }
  • else
  • {
  • throw new CrmDbClientException("BeginTransaction must be called before commit or rollback. No open transactions found");
  • }
  • }
  • /// <summary>
  • /// Rollbacks transaction
  • /// </summary>
  • public void RollbackTransaction()
  • {
  • try
  • {
  • _DbTransaction.Rollback();
  • }
  • catch (InvalidOperationException invexcept)
  • {
  • throw new CrmDbClientException(invexcept.Message, invexcept);
  • }
  • catch (Exception e)
  • {
  • throw new CrmDbClientException(e.Message, e);
  • }
  • finally
  • {
  • //dispose _dbTransaction
  • if (_DbTransaction != null)
  • _DbTransaction.Dispose();
  • _DbTransaction = null;
  • }
  • }
  • /// <summary>
  • /// Creates a generic parameter
  • /// </summary>
  • /// <param name="ParameterName">Represents the prameter's name</param>
  • /// <param name="ParameterValue">Represents the parameter's value</param>
  • /// <returns>IDbDataParameter</returns>
  • private IDbDataParameter CreateParameter(string ParameterName,object ParameterValue)
  • {
  • IDbDataParameter p = _DbCommand.CreateParameter(); //create the command using the DBCommand
  • p.Value = ParameterValue;
  • p.ParameterName = ParameterName ;
  • return p;
  • }
  • /// <summary>
  • /// Open the connection with de server
  • /// </summary>
  • private void OpenConnection()
  • {
  • if (_DbConnection.State != ConnectionState.Open)
  • _DbConnection.Open();
  • }
  • /// <summary>
  • /// Closes the connection with the server
  • /// </summary>
  • private void CloseConnection()
  • {
  • if (_DbConnection.State != ConnectionState.Closed)
  • _DbConnection.Close();
  • }
  • /// <summary>
  • /// Executes a scalar query
  • /// </summary>
  • /// <param name="sql">Represents the query text</param>
  • /// <param name="CmdType">Represents the command type</param>
  • /// <returns>Object</returns>
  • public object ExecuteScalarQuery(string QueryText,CommandType CmdType)
  • {
  • _DbCommand.CommandText = QueryText; //set que querytext
  • _DbCommand.CommandType = CmdType;
  • OpenConnection();
  • object val = _DbCommand.ExecuteScalar(); //runs que query
  • _DbCommand.Parameters.Clear();
  • //CloseConnection();
  • return val;
  • }
  • /// <summary>
  • /// Executes a parametred scalar query
  • /// </summary>
  • /// <param name="QueryText">Query text</param>
  • /// <param name="Parameters">Parameters list</param>
  • /// <param name="CmdType">Command type</param>
  • /// <returns></returns>
  • public object ExecuteScalarQuery(string QueryText, Dictionary<string, object> Parameters, CommandType CmdType)
  • {
  • _DbCommand.CommandText = QueryText;
  • _DbCommand.CommandType = CommandType.Text;
  • _DbCommand.Parameters.Clear(); //clear parameters
  • foreach (KeyValuePair<string, object> k in Parameters)
  • {
  • _DbCommand.Parameters.Add(CreateParameter(k.Key, k.Value));
  • }
  • OpenConnection();
  • object val = _DbCommand.ExecuteScalar();
  • _DbCommand.Parameters.Clear(); //clear parameters
  • return val;
  • }
  • /// <summary>
  • /// Executes a query and retourns the result into a datatable.
  • /// </summary>
  • /// <param name="QueryText">Query text</param>
  • /// <param name="CmdType">Command type</param>
  • /// <returns>Datatable containing the result</returns>
  • public DataTable ExecuteReaderQuery(string QueryText, CommandType CmdType)
  • {
  • DataSet myDs = new DataSet();
  • _DbCommand.CommandText = QueryText;
  • _DbCommand.CommandType = CmdType;
  • OpenConnection();
  • _DbDataAdapter.Fill(myDs);
  • return myDs.Tables[0];
  • }
  • /// <summary>
  • /// Executes a parametred query and retourns the result into a datatable
  • /// </summary>
  • /// <param name="QueryText">Query text</param>
  • /// <param name="QueryParameters">Command type</param>
  • /// <param name="CmdType">Parameters list</param>
  • /// <returns></returns>
  • public DataTable ExecuteReaderQuery(string QueryText, Dictionary<string, object> QueryParameters, CommandType CmdType)
  • {
  • _DbDataAdapter.SelectCommand.Parameters.Clear();
  • foreach (KeyValuePair<string, object> k in QueryParameters)
  • {
  • _DbDataAdapter.SelectCommand.Parameters.Add(CreateParameter(k.Key, k.Value));
  • }
  • DataTable val = this.ExecuteReaderQuery(QueryText,CmdType);
  • _DbCommand.Parameters.Clear(); //clear parameters
  • return val;
  • }
  • /// <summary>
  • /// Executes a query and retourns affected rows number
  • /// </summary>
  • /// <param name="QueryText">Query text</param>
  • /// <param name="CmdType">Command Type</param>
  • /// <returns></returns>
  • public int ExecuteNonQuery(string QueryText, CommandType CmdType)
  • {
  • _DbCommand.CommandText = QueryText;
  • _DbCommand.CommandType = CmdType;
  • OpenConnection();
  • return _DbCommand.ExecuteNonQuery();
  • }
  • /// <summary>
  • /// Executes a parametred query and retourns affected rows number
  • /// </summary>
  • /// <param name="QueryText">Query text</param>
  • /// <param name="QueryParameters">Query parameters</param>
  • /// <param name="CmdType">Command type</param>
  • /// <returns>Integer value representing affected rows</returns>
  • public int ExecuteNonQuery(string QueryText, Dictionary<string, object> QueryParameters, CommandType CmdType)
  • {
  • _DbCommand.Parameters.Clear();
  • foreach (KeyValuePair<string, object> k in QueryParameters)
  • {
  • _DbCommand.Parameters.Add(this.CreateParameter(k.Key, k.Value));
  • }
  • int val = this.ExecuteNonQuery(QueryText, CmdType);
  • _DbCommand.Parameters.Clear();
  • return val;
  • }
  • }
  • }
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data.Common;
using System.Data;




namespace CrmDbClient
{
    public class CrmDbClientException:Exception 
    {
        public CrmDbClientException(string Message):base(Message){}
        public CrmDbClientException(string Message, Exception inerException) : base(Message, inerException) { }
    }
    
    public class CrmDbClient : IDisposable 
    {
       
        private IDbConnection  _DbConnection;
        private IDbCommand _DbCommand;
        private ConnectionStringSettings _DbConnectionString;
        private DbProviderFactory _DbFactory = null;
        private IDbTransaction _DbTransaction = null;
        private IDbDataAdapter _DbDataAdapter = null;
        
        
        /// <summary>
        /// Creates a new instance of CRMDbClient
        /// </summary>
        /// <param name="CurrentConnectionString"></param>
        public CrmDbClient(ConnectionStringSettings CurrentConnectionString)
        {
            _DbConnectionString = CurrentConnectionString;


                                 
                            _DbFactory = DbProviderFactories.GetFactory(CurrentConnectionString.ProviderName);
                            _DbConnection = _DbFactory.CreateConnection();
                            _DbConnection.ConnectionString = CurrentConnectionString.ConnectionString;
                            _DbCommand = _DbConnection.CreateCommand();
                        
                            _DbDataAdapter = _DbFactory.CreateDataAdapter();
                            _DbDataAdapter.SelectCommand = _DbCommand;
                           
                        
                       

             

           OpenConnection();

        }
        /// <summary>
        /// Destroy the current instance
        /// </summary>
        public void Dispose()
        {
            CloseConnection();
            
            _DbCommand.Dispose();
            _DbConnection.Dispose();
            _DbConnectionString = null;
            _DbDataAdapter = null;
            _DbFactory = null;
            _DbTransaction = null;
            
        }

        ~CrmDbClient()
        {
            GC.Collect();
        }
        
        #region Properties
        /// <summary>
        /// Gets or sets the command timeout in seconds
        /// </summary>
        public int CommandTimeout
        {
            get { return _DbCommand.CommandTimeout; }
            set { _DbCommand.CommandTimeout = value; }
        }
        /// <summary>
        /// Gets the database provider
        /// </summary>
        public string DataBaseProvider
        {
            get{return _DbConnectionString.ProviderName;}
        }
        /// <summary>
        /// Gets or set the 
        /// </summary>
        public int ConnectionTimeout
        {
            get { return _DbConnection.ConnectionTimeout; }
        }

        #endregion
        /// <summary>
        /// Begins transaction
        /// </summary>
        public void BeginTransaction()
        {
            _DbCommand.Transaction = _DbTransaction = _DbConnection.BeginTransaction();
        }
        /// <summary>
        /// Commit transaction
        /// </summary>
        public void CommitTransaction()
        {
            if (_DbTransaction != null)
            {
                _DbTransaction.Commit();
                _DbTransaction.Dispose();
                _DbTransaction = null;
                _DbCommand.Transaction = null;
                
            }
            else
            {
                throw new CrmDbClientException("BeginTransaction must be called before commit or rollback. No open transactions found");
            }
        }
        /// <summary>
        /// Rollbacks transaction
        /// </summary>
        public void RollbackTransaction()
        {
            try
            {
                _DbTransaction.Rollback();
            }
            catch (InvalidOperationException invexcept)
            {
                throw new CrmDbClientException(invexcept.Message, invexcept);
            }
            catch (Exception e)
            {
                throw new CrmDbClientException(e.Message, e);
            }
            finally
            {
                //dispose _dbTransaction
                if (_DbTransaction != null)
                    _DbTransaction.Dispose();

                _DbTransaction = null;
            }
        }
        /// <summary>
        /// Creates a generic parameter
        /// </summary>
        /// <param name="ParameterName">Represents the prameter's name</param>
        /// <param name="ParameterValue">Represents the parameter's value</param>
        /// <returns>IDbDataParameter</returns>
        private IDbDataParameter CreateParameter(string ParameterName,object ParameterValue)
        {
                IDbDataParameter p = _DbCommand.CreateParameter(); //create the command using the DBCommand
                p.Value = ParameterValue;
                p.ParameterName = ParameterName ;
                return p;       
        }
        /// <summary>
        /// Open the connection with de server
        /// </summary>
        private void OpenConnection()
        {
            if (_DbConnection.State != ConnectionState.Open)
                _DbConnection.Open();
        }
        /// <summary>
        /// Closes the connection with the server
        /// </summary>
        private void CloseConnection()
        {
            if (_DbConnection.State != ConnectionState.Closed)
                _DbConnection.Close();
        }
        /// <summary>
        /// Executes a scalar query
        /// </summary>
        /// <param name="sql">Represents the query text</param>
        /// <param name="CmdType">Represents the command type</param>
        /// <returns>Object</returns>
        public object ExecuteScalarQuery(string QueryText,CommandType CmdType)
        {
            
            _DbCommand.CommandText = QueryText; //set que querytext
            _DbCommand.CommandType = CmdType;

            OpenConnection();

            object val = _DbCommand.ExecuteScalar(); //runs que query

            _DbCommand.Parameters.Clear();
            //CloseConnection();

            return val;
        }
        /// <summary>
        /// Executes a parametred scalar query
        /// </summary>
        /// <param name="QueryText">Query text</param>
        /// <param name="Parameters">Parameters list</param>
        /// <param name="CmdType">Command type</param>
        /// <returns></returns>
        public object ExecuteScalarQuery(string QueryText, Dictionary<string, object> Parameters, CommandType CmdType)
        {
           
            _DbCommand.CommandText = QueryText;
            
            _DbCommand.CommandType = CommandType.Text;

            _DbCommand.Parameters.Clear(); //clear parameters
            foreach (KeyValuePair<string, object> k in Parameters)
            {
                _DbCommand.Parameters.Add(CreateParameter(k.Key, k.Value));
            }

            OpenConnection();
            object val = _DbCommand.ExecuteScalar();

            _DbCommand.Parameters.Clear(); //clear parameters
            
            
            return val;
        }
       
        /// <summary>
        /// Executes a query and retourns the result into a datatable.
        /// </summary>
        /// <param name="QueryText">Query text</param>
        /// <param name="CmdType">Command type</param>
        /// <returns>Datatable containing the result</returns>
        public DataTable ExecuteReaderQuery(string QueryText, CommandType CmdType)
        {
            DataSet myDs = new DataSet();
           
            _DbCommand.CommandText = QueryText;
            _DbCommand.CommandType = CmdType;

            OpenConnection();
            
            _DbDataAdapter.Fill(myDs);

            

            return myDs.Tables[0];
        }
        
        /// <summary>
        /// Executes a parametred query and retourns the result into a datatable
        /// </summary>
        /// <param name="QueryText">Query text</param>
        /// <param name="QueryParameters">Command type</param>
        /// <param name="CmdType">Parameters list</param>
        /// <returns></returns>
        public DataTable ExecuteReaderQuery(string QueryText, Dictionary<string, object> QueryParameters, CommandType CmdType)
        {
            _DbDataAdapter.SelectCommand.Parameters.Clear();

            foreach (KeyValuePair<string, object> k in QueryParameters)
            {
                 _DbDataAdapter.SelectCommand.Parameters.Add(CreateParameter(k.Key, k.Value));
            }

            DataTable val = this.ExecuteReaderQuery(QueryText,CmdType);
            _DbCommand.Parameters.Clear(); //clear parameters

            return val;
        }
        /// <summary>
        /// Executes a query and retourns affected rows number
        /// </summary>
        /// <param name="QueryText">Query text</param>
        /// <param name="CmdType">Command Type</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string QueryText, CommandType CmdType)
        {
            _DbCommand.CommandText = QueryText;
            _DbCommand.CommandType = CmdType;
            OpenConnection();
            return _DbCommand.ExecuteNonQuery();
        }
        /// <summary>
        /// Executes a parametred query and retourns affected rows number
        /// </summary>
        /// <param name="QueryText">Query text</param>
        /// <param name="QueryParameters">Query parameters</param>
        /// <param name="CmdType">Command type</param>
        /// <returns>Integer value representing affected rows</returns>
        public int ExecuteNonQuery(string QueryText, Dictionary<string, object> QueryParameters, CommandType CmdType)
        {
            _DbCommand.Parameters.Clear();

            foreach (KeyValuePair<string, object> k in QueryParameters)
            {
                _DbCommand.Parameters.Add(this.CreateParameter(k.Key, k.Value));
            }
            int val = this.ExecuteNonQuery(QueryText, CmdType);

            _DbCommand.Parameters.Clear();

            return val;
        }

    }
}

Conclusion

Il faut imperativement passer au contructeur un type ConnectionstringSetting  (voir la msdn pour détails)

Ce type va derminer la chaine de connexion et le type de base à utiliser et en fonction de cela, le système va créer les composants nécessaires à cela.

Je l'utilise avec du Oracle, Sybase, MsSql Server, CSV, Access, ODBC et ça fonctionne super bien.. de plus ça prend en charge les transactions.
 

Historique

16 juin 2006 09:12:40 :
.
28 mars 2008 15:49:46 :
Nouvelle version plus fiable et plus simple à comprendre, à implémenter.
28 mars 2008 15:51:12 :
J'ai fait une nouvelle version plus complétè et très fiable.

Commentaires et avis

signaler à un administrateur
Commentaire de shadow52 le 17/06/2006 11:31:21

Juste une petite question : dans la ligne 186
"ConnectionStringSettings cfg = ConfigurationManager.ConnectionStrings[0];"
A quoi correspond ConnectionStringSettings  et ConfigurationManager ?

signaler à un administrateur
Commentaire de woot6768 le 20/06/2006 10:00:39

Bonjour,
Source qui pourrat servir à de nombreux débutant qui souhaitent travaillé sur des bases de données.
Woot

signaler à un administrateur
Commentaire de bossun le 22/06/2006 10:44:02

shadow52:
c'est la chaine de connexion qui se trouve dans le fichire de configuration...

rien t'en empeche de mettre en dur ou de mettre directement le nom de ta chaine... j'ai du utiliser mes index car c'était un peu particulier dans mon cas.

bossun

signaler à un administrateur
Commentaire de netloop le 31/01/2007 08:30:06

Bonjour,
Complètement débutant en DOT NET, j'aimerai savoir où se trouve le fichier de configuration.
Merci
Netloop

signaler à un administrateur
Commentaire de Trollum le 28/03/2008 15:04:09

Bonjour,
J'utilise ta classe et je suis dans un impasse et je ne trouve pas la solution,
Ta classe fonctionne superbe pour tous ce qui sont requêtes "SELECT" mais en ce moment je veux faire une requête "INSERT".
J'ai fait une nouvelle méthode Insertion et je dois utiliser le DataAdapter _DA et sa méthode Update() mais le problème c'est quelle me demande un paramètre DataRow[] et je veux faire l'INSERT à partir des données saisies dans un formulaire.
Auparavant j'utilisai toujours les pilotes SQL et la méthode ExecuteNonQuery() et là, je ne vois pas comment faire.

Peut tu m'aider???

Merci d'avance!!!

signaler à un administrateur
Commentaire de bossun le 28/03/2008 15:42:08

Attends lundi, j'ai refait une classe 10x mieux sur le meme principe.. je poste le code...  si ça t'interesse...

signaler à un administrateur
Commentaire de bossun le 28/03/2008 15:55:33

bon j'ai fini par la publier cette nouvelle version. bon week-end à tous

signaler à un administrateur
Commentaire de Trollum le 28/03/2008 16:08:41

Ça m'intéresse!!! Je verrai lundi ta nouvelle classe.

Bon weekend à toi aussi!!!

signaler à un administrateur
Commentaire de Trollum le 31/03/2008 20:06:24 8/10

Bravo!!

Très bonne ta classe!!! Je vais l'essayer.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.