IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème de connexion sur une base de données.


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2002
    Messages : 34
    Points : 31
    Points
    31
    Par défaut Problème de connexion sur une base de données.
    Bonjour,

    J'ai des problèmes avec une connexion à ma base de données.
    La classe de connexion que j'ai développé n'a pas révolutionnée le monde du C#. Elle est simple et efficace, sauf que j'ai en ce moment un message d'erreur comme celui-ci:
    2013-12-10 17:40:24.5948 - ERROR - IIS APPPOOL\WS_TEST: Message Class=DataAccess - Method=GetDataTable
    - Message: ExecuteReader nécessite une Connection ouverte et disponible. L'état actuel de la connexion est ouvert.
    - StackTrace: à System.Data.SqlClient.SqlConnection.GetOpenConnection(String method)
    à System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command)
    à System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
    à System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
    à System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
    à System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
    à System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
    à System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
    à System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    à System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
    à System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
    à ADSUtilities.DataAccess.GetDatatable(String sql)
    Requete: SELECT * FROM MA_TABLE

    Ce message apparaît avec la méthode suivante, j'ai ajouté des logs pour voir ce qui ce passait, mais je n'arrive pas à comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    public DataTable GetDatatable(string sql)
    {
    	DataTable dt = new DataTable();
    	logger.Debug(" Message Class=DataAccess - Method=GetDataTable: (Entrée) SQL = " + sql);
    	try
    	{
    		if (this.connex == null || this.connex.State != ConnectionState.Open)
    		{
    			switch (connex.State)
    			{
    				case ConnectionState.Broken:
    					logger.Debug(" Message Class=DataAccess - Method=GetDataTable - Etat BROKEN");
    					break;
    				case ConnectionState.Closed:
    					logger.Debug(" Message Class=DataAccess - Method=GetDataTable - Etat CLOSED ");
    					break;
    				case ConnectionState.Connecting:
    					logger.Debug(" Message Class=DataAccess - Method=GetDataTable - Etat CONNECTING ");
    					break;
    				case ConnectionState.Executing:
    					logger.Debug(" Message Class=DataAccess - Method=GetDataTable - Etat EXECUTING ");
    					break;
    				case ConnectionState.Fetching:
    					logger.Debug(" Message Class=DataAccess - Method=GetDataTable - Etat FETCHING");
    					break;
    				case ConnectionState.Open:
    					logger.Debug(" Message Class=DataAccess - Method=GetDataTable - Etat OPEN");
    					break;
    			}
     
     
    			if (this.connex != null) this.connex.Close();
     
    			if (OpenConnex() != true)
    			{
    				logger.Error(" Message Class=DataAccess - Method=GetDataTable \r\n\t- Message: ******** Connexion NON OUVERTE  ******** Requete: " + sql);
    				return null;
    			}
    		}
     
    		using (SqlDataAdapter da = new SqlDataAdapter(sql, connex))
    		{
     
    			da.SelectCommand.CommandTimeout = 0;
    			da.Fill(dt);
    		}
    	}
    	catch (SqlException SqlEx)
    	{
    		GestionErreur(SqlEx, sql);
    	}
    	catch (Exception ex)
    	{
    		logger.Error(" Message Class=DataAccess - Method=GetDataTable \r\n\t- Message: " + ex.Message + "\r\n\t- StackTrace: " + ex.StackTrace + "\r\n\tRequete: " + sql);
    	}
     
    	if (this.connex != null)
    	{
    		this.connex.Close();
    		this.connex.Dispose();
    	}
     
    	logger.Debug(" Message Class=DataAccess - Method=GetDataTable: (Sortie) SQL = " + sql);
     
    	return dt;
    }
    J'aimerai comprendre pourquoi j'ai ce message d'erreur. Dois-je repenser cette classe d'accès aux données ?

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Est-ce que tu utilises cette classe dans un contexte multithreadé ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2002
    Messages : 34
    Points : 31
    Points
    31
    Par défaut
    Bonjour DotNetMatt

    J'utilise principalement cette classe dans un web service de type REST Web API.
    Donc oui.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/04/2012, 12h42
  2. [Lazarus] Problème de requête sur une base de données
    Par bubulemaster dans le forum Lazarus
    Réponses: 1
    Dernier message: 09/11/2007, 18h14
  3. Problème de logique sur une base de données
    Par neuneu1 dans le forum Bases de données
    Réponses: 18
    Dernier message: 07/10/2007, 16h47
  4. problème de connexion sur une base mysql
    Par boss_gama dans le forum Installation
    Réponses: 4
    Dernier message: 05/09/2006, 14h13
  5. Connexion sur une base de données Postgre
    Par ktox dans le forum C++Builder
    Réponses: 3
    Dernier message: 04/08/2005, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo