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
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|