Probleme avec une dll

Résolu
cispo Messages postés 103 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 10 septembre 2007 - 9 août 2005 à 13:03
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Derniè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");

string chemin_base = SR.ReadLine();

SR.Close();





Cnx.ConnectionString=@"provider=Microsoft.Jet.OLEDB.4.0;Data
Source="+chemin_base;

Cmd.Connection = Cnx;

Cnx.Open();



Cmd.CommandText=requete;

Da = new OleDbDataAdapter(Cmd.CommandText,Cnx);

Dset.Clear();

Da.Fill(Dset,"from");

Dtable = Dset.Tables[0];

}

catch(System.Exception ex)

{

Cnx.Close();

MessageBox.Show(ex.Message);

}

return Dtable ;

}



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.



Merci d'avance

5 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
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();

Cnx.ConnectionString=@"provider=Microsoft.Jet.OLEDB.4.0;Data Source="+chemin_base;
Cmd.Connection = Cnx;
Cnx.Open();

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);

Amicalement, SharpMao
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
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("'","''"))

Amicalement, SharpMao
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
9 août 2005 à 15:44
Pff j'ai fait un refresh de la page et j'ai même pas vu que SharpMao avait déja répondu : )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 août 2005 à 23:34
lol, il y a donc pire que moi ;-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Rejoignez-nous