Comment obtenir une sortie de la valeur de paramètre de la méthode ExecuteNonQuery dans les entreprises de la bibliothèque (c#)?
ma procédure stockée est :
create Procedure spSetUser
(
@Name NVarchar(50),
@OrganicTitle NVarchar(30),
@UserName NVarchar(20),
@Password NVarchar(16),
@Result Int Output
)
As
Begin
Set @Result = -1
If Not Exists(Select UserId From dbo.Users Where UserName=@UserName)
Begin
Insert Into dbo.Users (Name,OrganicTitle,UserName,[Password])
Values(@Name,@OrganicTitle,@UserName,@Password)
Set @Result = SCOPE_IDENTITY()
End
Return
End
Go
et ma classe (dans microsoft enterprise library):
[DataObjectMethod(DataObjectMethodType.Insert)]
public Int32 SetUser(UserFieldSet Data)
{
Int32 Result = 0;
object[] values = new object[] { Data.Name, Data.OrganicTitle, Data.UserName, Data.Password, Data.UserId };
Result = Db.ExecuteNonQuery("spSetUser", values);
return Result;
}
Résultat est roweffected d'exécuter la procédure stockée, mais je veux obtenir la valeur de @Result (paramètre de sortie de la procédure), Comment puis-je l'obtenir ?
UserFieldClass est :
public class UserFieldSet
{
public Int32 UserId;
public String Name;
public String OrganicTitle;
public String UserName;
public String Password;
}
Astuce : je le sais, utilisez ce code pour obtenir @Result:
public Int32 SetUser(UserFieldSet Data)
{
Int32 Result = 0;
DbCommand DbCmd = Db.GetStoredProcCommand("spSetUser");
Db.AddInParameter(DbCmd, "@Name", DbType.String, Data.Name);
Db.AddInParameter(DbCmd, "@OrganicTitle", DbType.String, Data.OrganicTitle);
Db.AddInParameter(DbCmd, "@UserName", DbType.String, Data.UserName);
Db.AddInParameter(DbCmd, "@Password", DbType.String, Data.Password);
Db.AddOutParameter(DbCmd, "@Result", DbType.Int32, Int32.MaxValue);
Db.ExecuteNonQuery(DbCmd);
Result = (Int32)Db.GetParameterValue(DbCmd, "@Result");
return Result;
}
Mais je peux l'obtenir avec cette methd :
Result = Db.ExecuteNonQuery("spSetUser", values);
Avez-vous essayé de regarder
values[4]
après l'appel? fait-il mis à jour? bien qu': il se pourrait que lors de l'utilisation de cette signature, tous les paramètres sont ajoutés en tant qu'entrée.OriginalL'auteur Ali Ahmadi | 2013-02-06
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé d'utiliser ExecuteScalar à la place?
select
valeur; je ne m'attends pas à changer laout
paramètre de la manipulation deVeuillez mettre à jour mon code, je veux insérer les données dans ma table, et obtenir valueof userid. Comment puis-je ?
Avez-vous ce travail? Je suis en train de faire la même chose que vous et aussi a changé à utiliser exécuter scalaire, mais encore le paramètre de sortie est vide. Si vous avez cela, vous s'il vous plaît partager ce que vous avez fait. Merci!
OriginalL'auteur bean
Que j'ai lu la question, vous avez deux implémentations de
SetUser
; celui qui configure les paramètres manuellement à l'aide deAddInParameter
etAddOutParameter
, et celle qui vient de se passe un tableau. Si je comprends correctement à la question, la première approche fonctionne, et la seconde ne l'est pas. Et vous voulez savoir comment le faire fonctionner avec le moins verbeux deuxième approche.Mon conseil: ne le faites pas. Le verbose code œuvres, et de plus: il travaille pour les bonnes raisons - en particulier, il est à l'aide de passer par nom, plutôt que de passer par l'index, qui doit toujours être préféré.
Ma grande question, cependant, serait: pourquoi bibliothèque d'entreprise? - qui ajoute très peu par rapport à raw ADO.NET. Si je voulais commodité, je serais probablement à la recherche à "dapper", mais même avec ce
out
les paramètres sont un peu faff:Normalement c'est un peu plus simple que cela; par exemple:
OriginalL'auteur Marc Gravell