begin process at 2010 02 10 08:41:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > SQLMANAGER : FACILITE L'ACCÈS À UNE BASE DE DONNÉE MS SQL

SQLMANAGER : FACILITE L'ACCÈS À UNE BASE DE DONNÉE MS SQL


 Information sur la source

 Description

Salut tout le monde,
Aujourd'hui, je veux partager avec vous une classe simple et efficace qui vous permet d'executer des requêtes SQL vers un serveur MS SQL.
Cette classe est thread-safe et conçu en Singleton.
Elle permet la gestion des erreurs grâce aux classes QueryResult, SqlQueryResult, SqlNonQueryResult.
Finalement, elle copie les données récupérées dans le DataReader vers une table (DataTable) afin de pouvoir consulter les données en mode déconnecter.

Source

  • using System;
  • using System.Collections.Generic;
  • using System.Data;
  • using System.Data.Common;
  • using System.Data.SqlClient;
  • using System.Text;
  • using System.Runtime.Remoting.Contexts;
  • namespace zAlbumManager
  • {
  • public class SqlManager : IDisposable
  • {
  • //SqlManager est une classe Singleton
  • private static SqlManager sqlmanager = new SqlManager();
  • private string connectionString = AppSettings.ConnectionString;
  • private SqlConnection sqlConnection;
  • private bool disposed = false;
  • //contient la dernière erreur survenue
  • private string lastError;
  • public string LastError { get { return lastError; } }
  • #region Constructeur
  • private SqlManager()
  • {
  • sqlConnection = new SqlConnection(connectionString);
  • OpenConnection();
  • }
  • public static SqlManager GetInstance()
  • {
  • return sqlmanager;
  • }
  • #endregion
  • #region ExecuteQuery
  • public SqlQueryResult ExecuteQuery(string query, SqlParameter[] parameters)
  • {
  • lock (this)
  • {
  • SqlQueryResult sqr = new SqlQueryResult();
  • SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
  • if (parameters != null) sqlCommand.Parameters.AddRange(parameters);
  • SqlDataReader sqlDataReader = null;
  • try
  • {
  • sqlDataReader = sqlCommand.ExecuteReader();
  • }
  • catch (Exception e)
  • {
  • lastError = sqr.ErrorMessage = e.Message;
  • sqr.IsSuccess = false;
  • sqr.Error = Error.DataBaseAccessError;
  • }
  • if (sqr.IsSuccess)
  • {
  • sqr.Table = new DataReaderAdapter().FillFromReader(sqlDataReader);
  • sqlDataReader.Close();
  • }
  • return sqr;
  • }
  • }
  • public SqlQueryResult ExecuteQuery(string query)
  • {
  • return this.ExecuteQuery(query, null);
  • }
  • #endregion
  • #region ExecuteNonQuery
  • public SqlNonQueryResult ExecuteNonQuery(string query, SqlParameter[] parameters)
  • {
  • lock (this)
  • {
  • SqlNonQueryResult snqr = new SqlNonQueryResult();
  • SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
  • if (parameters != null) sqlCommand.Parameters.AddRange(parameters);
  • try
  • {
  • //sqlConnection.Open();
  • snqr.NumberOfRowsAffected = sqlCommand.ExecuteNonQuery();
  • }
  • catch (Exception e)
  • {
  • lastError = snqr.ErrorMessage = e.Message;
  • snqr.IsSuccess = false;
  • snqr.Error = Error.DataBaseAccessError;
  • }
  • return snqr;
  • }
  • }
  • public SqlNonQueryResult ExecuteNonQuery(string query)
  • {
  • return this.ExecuteNonQuery(query, null);
  • }
  • #endregion
  • #region OpenConnection
  • public void OpenConnection()
  • {
  • try
  • {
  • sqlConnection.Open();
  • }
  • catch (Exception e)
  • {
  • lastError = e.Message;
  • }
  • }
  • #endregion
  • #region CloseConnection
  • public void CloseConnection()
  • {
  • if (sqlConnection.State != ConnectionState.Closed) sqlConnection.Close();
  • }
  • #endregion
  • #region IDisposable Membres
  • public void Dispose()
  • {
  • if (!this.disposed)
  • {
  • CloseConnection();
  • sqlConnection.Dispose();
  • disposed = true;
  • }
  • GC.SuppressFinalize(this);
  • }
  • #endregion
  • }
  • #region QueryResult
  • public class QueryResult
  • {
  • private bool isSuccess = true;
  • private string errorMessage;
  • private Error error;
  • public Error Error { get { return error; } set { error = value; } }
  • public bool IsSuccess { get { return isSuccess; } set { isSuccess = value; } }
  • public string ErrorMessage { get { return errorMessage; } set { errorMessage = value; } }
  • public override string ToString()
  • {
  • return " - IsSuccess : " + isSuccess + "\n" + " - Error : " + error + "\n" + " - ErrorMessage : " + errorMessage;
  • }
  • }
  • #endregion
  • #region SqlQueryResult
  • public class SqlQueryResult : QueryResult
  • {
  • private DataTable table;
  • public DataTable Table { get { return table; } set { table = value; } }
  • }
  • #endregion
  • #region SqlNonQueryResult
  • public class SqlNonQueryResult : QueryResult
  • {
  • private int numberOfRowsAffected;
  • public int NumberOfRowsAffected { get { return numberOfRowsAffected; } set { numberOfRowsAffected = value; } }
  • }
  • #endregion
  • #region DataReaderAdapter
  • class DataReaderAdapter : DbDataAdapter
  • {
  • public DataTable FillFromReader(IDataReader dataReader)
  • {
  • DataTable dt = new DataTable();
  • this.Fill(dt, dataReader);
  • return dt;
  • }
  • }
  • #endregion
  • }
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Text;
using System.Runtime.Remoting.Contexts;

namespace zAlbumManager
{
public class SqlManager : IDisposable
{
    //SqlManager est une classe Singleton
    private static SqlManager sqlmanager = new SqlManager();
    private string connectionString = AppSettings.ConnectionString;
    private SqlConnection sqlConnection;
    private bool disposed = false;
    //contient la dernière erreur survenue
    private string lastError;
    public string LastError { get { return lastError; } }

    #region Constructeur
    private SqlManager()
    {
        sqlConnection = new SqlConnection(connectionString);
        OpenConnection();
    }
    public static SqlManager GetInstance()
    {
        return sqlmanager;
    }
    #endregion

    #region ExecuteQuery
    public SqlQueryResult ExecuteQuery(string query, SqlParameter[] parameters)
    {
        lock (this)
        {
            SqlQueryResult sqr = new SqlQueryResult();
            SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
            if (parameters != null) sqlCommand.Parameters.AddRange(parameters);
            SqlDataReader sqlDataReader = null;
            try
            {
                sqlDataReader = sqlCommand.ExecuteReader();
            }
            catch (Exception e)
            {
                lastError = sqr.ErrorMessage =  e.Message;
                sqr.IsSuccess = false;
                sqr.Error = Error.DataBaseAccessError;
            }
            if (sqr.IsSuccess)
            {
                sqr.Table = new DataReaderAdapter().FillFromReader(sqlDataReader);
                sqlDataReader.Close();
            }
            return sqr;
        }
    }
    public SqlQueryResult ExecuteQuery(string query)
    {
        return this.ExecuteQuery(query, null);
    }
    #endregion
    #region ExecuteNonQuery
    public SqlNonQueryResult ExecuteNonQuery(string query, SqlParameter[] parameters)
    {
        lock (this)
        {
            SqlNonQueryResult snqr = new SqlNonQueryResult();
            SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
            if (parameters != null) sqlCommand.Parameters.AddRange(parameters);
            try
            {
                //sqlConnection.Open();
                snqr.NumberOfRowsAffected = sqlCommand.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                lastError = snqr.ErrorMessage = e.Message;
                snqr.IsSuccess = false;
                snqr.Error = Error.DataBaseAccessError;
            }
            return snqr;
        }
    }
    public SqlNonQueryResult ExecuteNonQuery(string query)
    {
        return this.ExecuteNonQuery(query, null);
    }
    #endregion


    #region OpenConnection
    public void OpenConnection()
    {
        try
        {
            sqlConnection.Open();
        }
        catch (Exception e)
        {
            lastError = e.Message;
        }
    }
    #endregion
    #region CloseConnection
    public void CloseConnection()
    {
        if (sqlConnection.State != ConnectionState.Closed) sqlConnection.Close();
    }
    #endregion

    #region IDisposable Membres
    public void Dispose()
    {
        if (!this.disposed)
        {
            CloseConnection();
            sqlConnection.Dispose();
            disposed = true;
        }
        GC.SuppressFinalize(this);
        
    }
    #endregion
}
#region QueryResult
public class QueryResult
{
    private bool isSuccess = true;
    private string errorMessage;
    private Error error;
    public Error Error { get { return error; } set { error = value; } }
    public bool IsSuccess { get { return isSuccess; } set { isSuccess = value; } }
    public string ErrorMessage { get { return errorMessage; } set { errorMessage = value; } }

    public override string ToString()
    {
        return " - IsSuccess : " + isSuccess + "\n" + " - Error : " + error + "\n" + " - ErrorMessage : " + errorMessage;
    }
}
#endregion 
#region SqlQueryResult
    public class SqlQueryResult : QueryResult
    {
        private DataTable table;
        public DataTable Table { get { return table; } set { table = value; } }
    }
    #endregion
#region SqlNonQueryResult
public class SqlNonQueryResult : QueryResult
{
    private int numberOfRowsAffected;
    public int NumberOfRowsAffected { get { return numberOfRowsAffected; } set { numberOfRowsAffected = value; } }
}
#endregion

#region DataReaderAdapter
class DataReaderAdapter : DbDataAdapter
{
    public DataTable FillFromReader(IDataReader dataReader)
    {
        DataTable dt = new DataTable();
        this.Fill(dt, dataReader);
        return dt;
    }
}
#endregion
}

 Conclusion

Je suis ouvert à tous conseils pour améliorer cette classe.
Je l'utilise beaucoup et le mieux qu'elle se comporte, meilleur seront mes programmes.


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) RESOURCEBINDER : INJECTER ET EXTRAIRE DES RESSOURCES
Source .NET (Dotnet) CONVERSION ASCII-8 - BINAIRE
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTAGE PRÉDÉFINI ET PERSONNALISÉ GRÂCE À LA COMPILATION DY...
Source avec Zip Source avec une capture Source .NET (Dotnet) PACMAN : ÉDITEUR DE NIVEAU
Source avec Zip Source avec une capture Source .NET (Dotnet) PLUGIN PROGRAMME EXTENSIBLE GRÂCE AUX MODULES

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) DEMO_XML_BASE_DE_DONNÉES par DanMor498
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPORTER SCRIPT SQL SQL SERVER (CREATE - DROP - INSERT - TAB... par citt
Source avec Zip Source .NET (Dotnet) BULKINSERT EN C# par Malkuth
Source avec Zip Source avec une capture Source .NET (Dotnet) SPLIT SQL SANS TABLE TEMPORAIRE par TheOnlyMaX
Source avec Zip Source .NET (Dotnet) MOTEUR CSV ET RECORDSET PERSO par SwitchApocalyps

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) SPLIT SQL SANS TABLE TEMPORAIRE par TheOnlyMaX
Source avec Zip Source avec une capture Source .NET (Dotnet) GENEREREQUÊTE par donald42
Source avec Zip Source avec une capture Source .NET (Dotnet) MSMQ UI MANAGER par TigrouMeow
Source avec Zip Source avec une capture Source .NET (Dotnet) REPOSITORY GENERATOR (FOR ENTERPRISE LIBRARY) par romagny13
Source .NET (Dotnet) SIMPLIFIER LES REQUETE SQL par student_001

Commentaires et avis

Commentaire de Alain Proviste le 19/08/2006 12:56:43 administrateur CS

je n'ai pas regardé le code mais à lire la description, on se dit "que demande le peuple?"

:)

Commentaire de svaroteaux le 21/08/2006 10:11:30

Il y a une "Application Block" de Microsoft qui répond déjà à cette problématique : Microsoft Application Blocks for .NET

Cette librairie est plutôt bien faite et performante. Elle permet de travailler avec des DataSet ou des SqlReader.
Le package propose une documentation très claire.

Où la trouver : http://www.microsoft.com/downloads/details.aspx?FamilyID=F63D1F0A-9877-4A7B-88EC-0426B48DF275&displaylang=en


Description par Microsoft :
The Microsoft Data Access Application Block for .NET consists of a single .NET-based assembly, which contains all of the functionality necessary to perform the most common data access tasks against a Microsoft SQL Server 2000 database.
Specifically, the Data Access Application Block helps you:
- Call stored procedures or SQL text commands.
- Specify parameter details.
- Return SqlDataReader, DataSet, XmlReader objects, or single values.
- Use strongly typed table and field names.
- Support parameter caching, where required.
- Allow additional tables to be added by passing in pre-existing datasets.
- Update a dataset with user-specified update commands.
- Create SqlCommand objects.
- Allow strongly typed data rows to be passed in place of parameters.

Commentaire de dirthangel le 21/03/2007 13:36:34

Salut j'ai un problème avec ta class quand j'essaie de la cpompilé j'obtient l'erreur

Error 8 The name 'Error' does not exist in the current context F:\Teddy\Visual Studio 2005\Projects\Mail\SqlClassManager\SqlClassManager.cs 102 34 SqlClassManager

Je débute en C# donc je ne sais pas trop d'ou sa vient , je pense qu'il me manque une référence mais je ne sais pas a quoi :s

merci de votre aide


Commentaire de badrbadr le 21/03/2007 16:02:17

oups, tu peux commenter les deux lignes dans QueryResult comme ça :
//private Error error;
//public Error Error { get { return error; } set { error = value; } }
ou encore juste créer une énumération bidon genre :
public enum Error
{
  Unknown
}

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Modification d'une base sql avec sql express [ par Fildomen ] sltje veux modifier le contenu de qlq tables de ma base, mais g rien trouver de ce genre dans sql express 2005, et même quand g installé son express m SQL Manager Add-in [ par zebobo5 ] Bonjour,Je cherche à faire un add-in pour Sql Server Manager, est ce que quelqu'un à un code, ou un tuto, un template, ou je ne sais quoi qui pourrai XML à SQL SERVER [ par swyms ] Bonjour à tous !!Voila, j'aimerais me lancer un peu dans les nouvelles technos, et j'aimerais faire une petite application un peu comme un parseur.Mon sql server 2005 et c# [ par fatal2disease ] j'ai une application a réaliser en C# avec une BD sqlserver, mais je n'ai trouvé aucun tutorial sur ce sujet qui m'explique la demarche a suivre ni la connection entre sql server 2000 et c# [ par bennejmamanaa ] bon soir j'ai besion d'aide pour connecter des interfaces graphiques crées avec c# à sql server 2000 Récupération de SQL Nom champs [ par ahikaz ] Salut,Est ce que c'est possible de récupérer par exemple de cette requête :SELECT nom AS Test FROM employe WHERE id=1;le libellé "Test" ? et cela aprè Erreur de déploiement [ par xmox667 ] Salut à tous, Je suis entrain de développer en c# une application qui utilise une base Sql Server 2005. J'ai créer un projet Sql Server qui déploie de Déplacer une BdD d'un serveur à un autre [ par feuillou ] Bonjour à tous,j'ai développé une appli sous visual studio .net 2003. Cette appli permet aux PC du réseau d'interroger une BdD qui se trouve un PC jou Création d'une base de données SQL Server en C# [ par jomree ] Bonjour, J'écris ce post car je recheche les quelques lignes qui me permettrait de créer une base de données en C#, quelqu'un a-t-il une idée de l'end Client Xp(excel)/server 2003(SQL2005) [ par snif84 ] Bonjours a tous, je suis en bts ig et je passe très bientôt mes pti. Et j'ai un Pb sur le pti base de données. Je n'arrive pas a connecté mon client x


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales