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:
J'aimerai comprendre pourquoi j'ai ce message d'erreur. Dois-je repenser cette classe d'accès aux données ?
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; }
Merci de votre aide.
Partager