2012-07-09 2 views
-1

J'ai un formulaire de registre et je veux vérifier que l'utilisateur ne s'est pas enregistré auparavant.Empêcher les utilisateurs de s'inscrire deux fois

Mon code est ci-dessous. Je pense que deux problèmes existent: (1) la méthode d'appel et (2) passer le paramètre à la procédure stockée. Mon symptôme est que cela provoque une exception qui dit que le paramètre d'entrée n'est pas initialisé.

create procedure fakeuser @username nvarchar(250),@codemeli nchar(10),@email  nvarchar(50), @user nvarchar(250) output,@code nchar(10)output,@mail nvarchar(50)output 
as 
if exists(select username,email,codemeli from karbar where [email protected]) 
set @[email protected] 
else if exists(select username,email,codemeli from karbar where [email protected]) 
set @[email protected] 
else if exists(select username,email,codemeli from karbar where [email protected]) 
set @mail= @email 

Voici le code C#:

public static string confirm(string username, string email, string codemeli) 
    { 
     string constring = "data source=.;database=site;integrated security=true;"; 
     SqlConnection connection = new SqlConnection(constring); 

     // Command - specify as StoredProcedure 
     SqlCommand command = new SqlCommand("fakeuser", connection); 
     command.CommandType = CommandType.StoredProcedure; 

     SqlParameter param = new SqlParameter("@username", SqlDbType.NVarChar); 
     param.Direction = ParameterDirection.Input; 
     param.Value = username; 
     command.Parameters.Add(param); 

     SqlParameter param2 = new SqlParameter("@email", SqlDbType.NVarChar); 
     param2.Direction = ParameterDirection.Input; 
     param2.Value = username; 
     command.Parameters.Add(param2); 

     SqlParameter param3 = new SqlParameter("@codemeli", SqlDbType.NChar); 
     param3.Direction = ParameterDirection.Input; 
     param3.Value = username; 
     command.Parameters.Add(param3); 

     // Return value as parameter 
     SqlParameter returnuser = new SqlParameter("@user", SqlDbType.NVarChar); 
     returnuser.Direction = ParameterDirection.ReturnValue; 
     command.Parameters.Add(returnuser); 

     SqlParameter returncode = new SqlParameter("@code", SqlDbType.NChar); 

     returncode.Direction = ParameterDirection.ReturnValue; 

     command.Parameters.Add(returncode); 
     SqlParameter returnmail = new SqlParameter("@mail", SqlDbType.NVarChar); 
     returnmail.Direction = ParameterDirection.ReturnValue; 
     command.Parameters.Add(returnmail); 

     // Execute the stored procedure 
     connection.Open(); 
     command.ExecuteNonQuery(); 
     connection.Close(); 

Merci.

+1

Qu'est-ce qui ne fonctionne pas exactement? Vous devez utiliser votre débogueur Visual Studio, SQL Server Management Studio et d'autres outils de programmation pour déterminer quelle partie du code est à l'origine du problème. Nous sommes heureux de vous aider si vous trouvez le problème et que vous n'arrivez pas à le résoudre, mais je pense que vous trouverez que la plupart des gens ne voudront pas trouver votre problème pour vous. –

Répondre

1

Définissez ParameterDirection=Output pour @ utilisateur, @ code et @mail et spécifiez également la largeur/taille/longueur du paramètre.

SqlParameter returnuser = new SqlParameter("@user", SqlDbType.NVarChar,100); 
returnuser.Direction = ParameterDirection.Output; 
command.Parameters.Add(returnuser); 
+0

je le fais mais cette exception se produit-> la taille de la propriété a une taille invalide de 0. – quantum62

+0

@ quantum62 - vous devez spécifier la ** longueur ** du paramètre de sortie. – adatapost

+0

merci beaucoup .le problème à résoudre – quantum62

Questions connexes