Bonjour,
Je travail actuellement sur un système de réservation en C# et pour se faire j'ai pour but de récupérer l'identifiant de la session windows pour ensuite m'en servir dans une requête SQL pour récuperer les lignes où le champ login de la table soit égale à cet identifiant. Je suis stagiaire dans une entreprise et le problème est que l'on m'a dit de faire de telle manière, en créant un paramètre (DbParameter) mais je ne comprend vraiment pas le principe...Je cherche depuis 2 jours sur internet mais sans aucune progression. Et là personne qui a "commencé" celà comme ça n'est jamais là donc je dois me débrouiller absolument mais la je désespère a obtenir le résultat que je désire. Je vais donc essayer de vous faire voir un peu mon code et ce que je veux y faire, en éspèrant réussir à me faire comprendre pour avoir un peu d'aide.
J'ai une classe Defautl.apx.cs où se trouve ce code (récuperation du login de session windows) :
public string login;
protected void Page_Load(object sender, EventArgs e)
{
//Authentification();
WindowsIdentity id = WindowsIdentity.GetCurrent();
login = id.Name.Substring(5, id.Name.Length - 5);
J'ai une méthode GetAnnuaire qui se trouve dans une classe DaAnnuaire.cs, comme ceci :
public Annuaire GetAnnuaire(string login)
{
using (DbConnection _connection = _providerFactory.CreateConnection())
{
_connection.ConnectionString = _connectionString;
_connection.Open();
DbCommand _command = _providerFactory.CreateCommand();
_command.Connection = _connection;
_command.CommandText "SELECT * FROM annuaire_new WHERE login @login";
DbParameter param0 = _providerFactory.CreateParameter();
param0.ParameterName = "@login";
param0.DbType = DbType.String;
param0.Value = login;
_command.Parameters.Add(param0);
DbDataReader reader = _command.ExecuteReader();
DataSet ds = new DataSet();
ds.Load(reader, LoadOption.OverwriteChanges, "Annuaire");
if (ds.Tables[0].Rows.Count > 0)
{
DataRow row = ds.Tables[0].Rows[0];
Annuaire a = new Annuaire();
a.Numero = row["numero"].ToString();
a.Nom = row["nom"].ToString();
a.Prenom = row["prenom"].ToString();
a.Telephone = row["telephone"].ToString();
a.Poste = row["poste"].ToString();
a.Numdirection = row["numdirection"].ToString();
a.Numservice = row["numservice"].ToString();
a.Unite = row["unite"].ToString();
a.Emploi = row["emploi"].ToString();
a.Matricule = row["matricule"].ToString();
a.Annuaire_tri = row["annuaire_tri"].ToString();
a.Mail = row["mail"].ToString();
a.Sexe = row["sexe"].ToString();
a.Annuaire_newsletter = row["annuaire_newsletter"].ToString();
a.Mail_pass = row["mail_pass"].ToString();
a.Mobile2 = row["mobile2"].ToString();
a.Portable_telephone = row["portable_telephone"].ToString();
a.Annuaire_datemisajour = row["annuaire_datemisajour"].ToString();
a.Dg_matricule = row["dg_matricule"].ToString();
a.Login = row["login"].ToString();
return a;
}
return null;
}
}
J'ai ma classe ProAnnuaire.cs comme ceci :
namespace ProcessReservation
{
public class ProAnnuaire
{
public List GetAllAnnuaire()
{
DaAnnuaire da = new DaAnnuaire();
return da.GetAllAnnuaire();
}
public Annuaire GetAnnuaire(string login)
{
DaAnnuaire da = new DaAnnuaire();
return da.GetAnnuaire(login);
}
}
}
Et dans ma page Default.aspx j'affiche mon ObjectDataSource comme ceci :
Et si j'exécute le projet tel qu'il est actuellement j'obtiens l'erreur suivante : ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'GetAnnuaire' that has no parameters.
Je ne sais pas si je suis clair dans mon explication, je souhaite tout simplement récupérer le login windows (1ere classe) et ensuite allez m'en servir dans ma requête SQL de la méthode GetAnnuaire e la classe DaAnnuaire.
J'ai vraiment du mal avec ce type de fonctionnement (process, DA, BO) mais je dois faire comme ceci.
Pouvez-vous m'aider et même m'éclairer un peu plus sur ce fonctionnement, qui doit être courant en C# apparemment.
Bien à vous,
SaiYan.