ASP.NET et SQL

Bonsoir à tous...

petite question en ASP.NET :
Je veux vérifier un login et un mot de passe stockées dans une table (jusque là, rien de teès original. Pour cela, j’utilise une procédure stockée getLogin. çà donne ceci :

private void Login_Click(object sender, System.EventArgs e)

{
  System.Data.SqlClient.SqlConnection cn;
  System.Data.SqlClient.SqlCommand cmd;
  System.Data.SqlClient.SqlParameter param1;
  System.Data.SqlClient.SqlParameter param2;
  System.Data.SqlClient.SqlDataReader dr;

  cn=new SqlConnection(“Data Source=localhost;”+“Integrated   Security=SSPI;Initial Catalog=database”);

  cmd=new SqlCommand(“getLogin”,cn);
  cmd.CommandType=CommandType.StoredProcedure;

  param1 = new System.Data.SqlClient.SqlParameter("@Login",SqlDbType.VarChar,50);

  param2 = new System.Data.SqlClient.SqlParameter ("@Password",SqlDbType.VarChar,50);

  param1.Value=user_login;
  param2.Value=user_password;

  param1.Direction = ParameterDirection.Input;
  param2.Direction = ParameterDirection.Input;

  cmd.Parameters.Add(param1);
  cmd.Parameters.Add(param2);

  try
  {
  cn.Open();
    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  }
  catch ( System.Data.SqlClient.SqlException sqle )
  {
    Label1.Text=sqle.ToString().Replace("
","
");
  }
    finally
  {
    cn.Close();
  }

}

et maintenant la procédure :
CREATE PROCEDURE dbo.getLogin ( @Login varchar(50), @Password varchar(50)

)
AS
SELECT
  PRN_USER, NME_USER
FROM
  TAB_USER
WHERE
  LGN_USER = @Login
AND
  PWD_USER = @Password

GO[/quote]mais il m’indique l’erreur suivante à l’execution de la méthode :

L’objet doit implémenter IConvertible. Description : Une exception non gérée s’est produite au moment de l’exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d’informations sur l’erreur et son origine dans le code.

Détails de l’exception: System.InvalidCastException: L’objet doit implémenter IConvertible.

Erreur source:

Ligne 67 : {
Ligne 68 : cn.Open();
Ligne 69 : dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
Ligne 70 :
Ligne 71 : }
Et évidemment, je ne sais pas du tout pourquoi…

Tu fais trop de trucs a la fois

Essaye un truc du genre…

  cmd=new SqlCommand("getLogin",cn);   cmd.CommandType=CommandType.StoredProcedure;   cmd.Parameters.Add([email=“@Login" target="_blank]“@Login[/email]“, user_login);   cmd.Parameters.Add([email=“@Passwd" target="_blank]“@Passwd[/email]“, user_password);   cn.Open(); try {   dr = cmd.ExecuteReader();   bool toutEstBon = dr.Read();   } finally {   cn.Close(); } [/quote]

Ok merci du conseil  

[/EDIT]
Ce message a été édité par EzecKiel le 31/01/2004

[quote]Tu fais trop de trucs a la fois

Essaye un truc du genre…

  cmd=new SqlCommand("getLogin",cn);   cmd.CommandType=CommandType.StoredProcedure;   cmd.Parameters.Add([email=“@Login" target="_blank]“@Login[/email]“, user_login);   cmd.Parameters.Add([email=“@Passwd" target="_blank]“@Passwd[/email]“, user_password);   cn.Open(); try {   dr = cmd.ExecuteReader();   bool toutEstBon = dr.Read();   } finally {   cn.Close(); }
[/quote]Petite précision : quand tu dis que je fais trop de trucs à la fois, çà signifie qu'il faudrait que je fasse comment ? que je fasse plusieurs méthode qui font chacune une partie du code ? par exemple une méthode checklogin qui vérifie le nom et le mot de passe du user, une methode qui se connecte au server SQL ?

C’est plutôt que tu fais en 10 lignes ce qu’il fait en 5… C’est du .net ici, c’est pas du Java …

[quote]mmmh, a mon avis, c’est ironique C’est plutôt que tu fais en 10 lignes ce qu’il fait en 5… C’est du .net ici, c’est pas du Java …[/quote]Exactement Tu cherche a trop faire de choses, tu peux te contenter de beaucoup moins de code pour faire la meme chose. Encore plus simple ta stored precedure pourrait renvoyer un count(*) au lieu du nom et du mot de passe ouchai pas quoi dont apparement tu te fous (tu veux juste savoir si t’as trouve une entree avec ce nom et ce mdp), et du coup au lieu de devoir instancier/utiliser un sqldatareader tu pourrais te contenter d’un if(sqlcommand.ExecuteScalar() ==1) { ok } else { pasbon}.

Ok, t’as raison, je me fous du mot de passe et du login en fait…
Je suis con la procédure ne renvoyait pas le mot de passe et le login mais le nom et le prénom

Sinon je suis dans la phase “J’apprends ce qu’il y a dans les livres” c’est à dire que j’essaie de comprendre un peu comment tout çà fonctionne et donc le code à
proprement parlé n’est pas réfléchi…

Je suis évidemment client de ces remarques constructives… donc n’hésitez pas

Ce message a été édité par EzecKiel le 01/02/2004