Accueil > > > CRÉER UNE APPLICATION INDÉPENDANTE À LA BASE DE DONNÉES
CRÉER UNE APPLICATION INDÉPENDANTE À LA BASE DE DONNÉES
Information sur la source
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.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
application de gestion commerciale en C# [ par hammadido ]
svp g une petite application de gestion commerciale (table client ,fournisseur et facture avec acces )que je doit le développer en C# et g pas trop de
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|