cispo
Messages postés103Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention10 septembre 2007
-
9 août 2005 à 13:03
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
10 août 2005 à 23:34
Bonjour,
J'ai créé une dll qui contient la class MyClass. Cette class contient la méthode suivante :
public object Requete_Select(string requete)
{
OleDbConnection Cnx = new OleDbConnection();
OleDbCommand Cmd = new OleDbCommand();
DataTable Dtable = new DataTable();
DataSet Dset = new DataSet();
OleDbDataAdapter Da;
try
{
StreamReader SR = new StreamReader
(Application.StartupPath+"\\chemin.txt");
Lorsque j'appelle cette méthode depuis un autre formulaire, je fais comme ceci :
MyClass MaClass = new MyClass();
MaClass.Requete_Select("SELECT * FROM UTILISATEUR WHERE login='"+Tlogin.Text+"' AND PASSWORD='"+Tpwd.Text);
Jusqu'ici pas de problème. Mais, je voudrais récupérer la valeur de Dtable et je n'y arrive pas. J'ai essaye de déclarer mon DataTable en public mais lorsque je fais MaClass. ,je ne trouve pas cette variable.
PS : j'ai bien rajouté la référence et le using correspondant.
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 9 août 2005 à 15:20
Hello,
Voici un correctif, dis-moi si ça fonctionne mieux :
//Si tu retourne un DataTable, mets DataTAble, et pas object
public DataTable Requete_Select(string requete)
{
OleDbConnection Cnx = new OleDbConnection();
OleDbCommand Cmd = new OleDbCommand();
DataTable Dtable = new DataTable();
OleDbDataAdapter Da;
try
{
StreamReader SR = new StreamReader (Application.StartupPath+"\\chemin.txt");
string chemin_base = SR.ReadLine();
SR.Close();
Cmd.CommandText=requete;
Da = new OleDbDataAdapter(Cmd.CommandText,Cnx);
// Fill peut remplir directement une DataTable
Da.Fill(Dtable);
}
catch(System.Exception ex)
{
MessageBox.Show(ex.Message);
}
//Ferme la connexion dans un bloc finally, autrement, ta connexion n'est fermée que s'il y a une erreur.
finally
{
Cnx.Close();
}
return Dtable ;
}
Pour l'appel de la fontion :
MyClass MaClass = new MyClass();
DataTable Dt = MaClass.Requete_Select("SELECT * FROM UTILISATEUR WHERE login='"+Tlogin.Text+"' AND PASSWORD='"+Tpwd.Text);
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 9 août 2005 à 15:26
ReHello,
Encore une chose, dans l'exemple donné, tu as oublié de refermer la chaîne de charactères du password.
Encore un conseil, il vaut mieux vérifier le mot de passe et le login dans le code et pas dans la base de données.
si quelqu'un met pour le login et le mot de passe " ' OR '' LIKE ' ", ta requête va revoyer tout le contenu de ta table UTILISATEUR, puisque la requête devient :
SELECT * FROM UTILISATEUR WHERE login='"' OR '' LIKE '' AND PASSWORD='' OR '' LIKE ''
Ou alors fait au moins un replace des ' par deux '' ( Tpwd.Text.Replace("'","''"))
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 9 août 2005 à 15:43
Salut, normalement avec la bonne référence et le using correspondant et si le chemin de la librairie est trouvé à l'exécution, ca devrait marcher, par contre comme ta méthode renvoie un objet il faut le caster en DataTable ou changer la signature de ta fonction, à remarquer aussi que si tu as déja une variable private et donc une propriété public de Dtable et que tu crées une nouvelle variable Dtable dans ta fonction, ce qui est le cas, ta variable locale masque la variable "globale". ( globale à la classe ).
public
class
MyClass
{
private
DataTable dtable;
public
DataTable DTable {
get {
return dtable; } }
}
//...
MyClass mc =
new
MyClass( );
mc.DTable =
new
DataTable( );
// OK