Accueil > > > 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
}
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
Sources de la même categorie
Commentaires et avis
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
|
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
|