Ouvrir mon DataReader???

inoussyago Messages postés 9 Date d'inscription jeudi 14 décembre 2000 Statut Membre Dernière intervention 11 juillet 2009 - 3 juil. 2009 à 23:20
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 4 juil. 2009 à 07:46
A voir également:

2 réponses

inoussyago Messages postés 9 Date d'inscription jeudi 14 décembre 2000 Statut Membre Dernière intervention 11 juillet 2009
3 juil. 2009 à 23:25
Salut,
Voila j'ai un problème avec mon script,
Voici une methode de ma classe AccesData: cette methode me retourne un datareader.



public System.Data.Common.DbDataReader ExecuteReader(String CommandText, ref System.Data.Common.DbConnection conn)
{
System.Data.Common.DbCommand oDbCommand;
System.Data.Common.DbDataReader oDbDataReader;
try
{
conn.Open();
oDbCommand = this.CreateCommand(CommandText, conn, System.Data.CommandType.Text);

oDbDataReader = oDbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);


}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}

return oDbDataReader;
}


Voici le code et voici mon Main


static void Main(string[] args)
{
AccesData obj;
obj = AccesData.GetInstance();
System.Data.Common.DbConnection conn;
conn = obj.CreateConnection("System.Data.SqlClient", "initial catalog=data; data source=.;integrated security=true;");
System.Data.Common.DbDataReader Da ;
Da = obj.ExecuteReader("select * from data",ref conn);
conn.Open();

Console.Write("Le nombre de ligne changer est {0}", Da.Read());
while (Da.Read())
{
Console.WriteLine("de numero {0} et de nom {1}", Da["id"], Da["name"]);
}
conn.Close();
Console.ReadLine();
}


voici les detail de mon erreur

L'exception System.InvalidOperationException n'a pas été gérée
Message="Tentative d'appel de Read non valide lorsque le lecteur est fermé."
Source="System.Data"
StackTrace:
à System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
à System.Data.SqlClient.SqlDataReader.Read()
à test.Program.Main(String[] args) dans D:\Boss\Script\projet été\C# - 2SF\test1\test1\Program.cs:ligne 173
à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
à System.Threading.ThreadHelper.ThreadStart()
InnerException:



c'est quoi le Lecteur es ce le dataset .
Si oui comment l'ouvrir , je n'ai rien trouvé sur le net
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
4 juil. 2009 à 07:46
Bonjour,

en fait c'est la connexion qui est fermée lorsque tu essayes de lire le reader.
La méthode Execute reader ne charge pas le DataReader completement, mais garde une sorte de curseur sur la connexion, le fait de fermer la connexion va fermer le datareader.

comme tu positionnes "CommandBehavior.CloseConnection" sur l'execution, la connexion sera fermée lorsque tu fermeras le reader.
enleve donc "conn.Close()" de ton finally.

autre remarques:
-inutile de mettre un "ref" devant le parametre connexion, les objets sont par défaut passés par référence.
-enleve le conn.open avant de lire le reader, car la connexion est déjà ouverte dans la methode.
-la methode "Read" du data reader ne donne pas le nombre de ligne, mais fait avancer le pointeur de lecture
-à la fin de la lecture, ferme le datareader, la connexion va se fermer avec.

je ne sais pas ce que tu veux faire au final, mais si ta methode ExecuteReader se borne à faire l'ouverture de la connexion et l'execution de la commande, elle est inutile et rend le code complexe.

C# is amazing, enjoy it!
0
Rejoignez-nous