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
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
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
désinstallation des serveurs sql [ par Fildomen ]
salutj'ai installé plusieurs sql server express, et chacun a ajouté un serveur dans mon pc, et quand j'ai tout désinstallé, les serveurs restent, et j
base sql problème [ par Fildomen ]
salut ( 4fois par jour!!)j'ai réinstaller le windows, et quand je veux attacher ma base de donnée sql server 2000, il me passe une erreur&nb
XML dans SQL server [ par lorenzo2603 ]
Bonjour à tous!! Je manipule des fichiers XML et je voudrai enregistrer les données des XML dans SQL server sous forme de table. J'ai beauc
sql command problème [ par Fildomen ]
Salutje veux selectionner d'une base les cellules qui sont classés de 1000 à 1100 après d'avoir appliquer un order by, comment faire???
Program Manager [ par fdouieb ]
Est-il possible en C# d'ouvrir la fenêtre d'arrêt de l'ordinateur l'équivalent en VB de AppActivate ("Program Manager") si je ne me tro
FDF + PDF + SQL SERVER2000 + C# + ASPX [ par rabbiwan ]
Bonjour,le titre est long, je sais mais il regroupe pas mal d'infoVoila je développe un site internet en aspx et c# ou je dois générer
SQL [ par abdoulax ]
Je voudrai créer un client SQL permettant de parcourir les données d'un serveur mysql.Je voudrais savoir s'il me suffit d'utiliser la librai
Selection dans le Datagrid avec connection SQL [ par Sead ]
Bonjour a tous,J'arrive à acceder aux données contenues dans mon unique table et j'affiche une partie d'entre elles dans mon datagrid. Par e
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
LINQLINQ par okosa
Cliquez pour lire la suite par okosa
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|