Appelez une procédure stockée à partir de .net

J'ai une procédure stockée comme ceci:

CREATE PROCEDURE up_action (@id int ,@group varchar(30)='' ,@nom varchar(30)='' ,@count varchar(30)=NULL ) AS BEGIN DECLARE @chrono int ...... select @date=date from users where count=@count INSERT INTO dialog (numappel,auteur,commentaire,etape,etapews,operant) VALUES (@numappel,@nomprenom,@dialog,14,14,@nomoperateur) SET @chrono = SCOPE_IDENTITY() select 'chrono'=@chrono END 

Je veux appeler cette procédure stockée à partir d'une application écrite en C # avec la possibilité de donner les parameters séparés par, (en fait leurs valeurs) et après recevoir un set d'loggings rs à partir duquel je peux get la valeur de la variable comme rs ("chrono").

Je connais la possibilité de créer tous les parameters et de dire le type, le nom, la valeur, etc. Mais je veux une méthode comme dans ASP car j'ai des procédures avec 100 parameters …

Normalement, avec POADO (Plain Old ADO.Net) vous feriez quelque chose comme ceci:

 using (SqlConnection conn = new SqlConnection(myConnectionSsortingng)) using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "up_action" cmd.Parameters.AddWithValue("@group", group); cmd.Parameters.AddWithValue("@nom", nom); cmd.Parameters.AddWithValue("@count", count); conn.Open(); using (SqlDataReader rd = cmd.ExecuteReader()) { if (rd.Read()) { chrono = rs["chrono"]; } } } 

Mais comme Richard l'a fait remarquer: il vaut mieux se pencher sur quelque chose comme LINQ to SQL, car cela va générer une méthode pour chaque procédure stockée (qui a automatiquement un argument par paramètre de votre procédure stockée). Voir ce lien pour plus d'informations.

Erm si vous voulez faciliter la tâche, regardez quelque chose comme LINQ to SQL.

Alors … la solution est:

 SqlCommand sqlCommand = new SqlCommand(); sqlCommand.CommandText = strQuery; rdr = sqlCommand.ExecuteReader(); rdr.Read(); int chrono = Convert.ToInt32(rdr["chrono"]) 

Et pour 2 parameters

 rdr.NextResult(); rdr.Read(); int str = Convert.ToInt32(rdr["str"]); 

Merci à tous pour vos réponses

Vous pouvez également consulter le bloc d'application d'access aux données dans Enterprise Libray, car il fournit de bons templates à suivre pour l'access aux données. Je vous suggère également de regarder à nouveau vos SP et de voir si vous pouvez les refactoriser, 100 parameters semble assez excessif.

J'imagine que c'est une procédure d'insertion / mise à jour … 100 parameters me semble trop, mais si c'est ce dont vous avez besoin, alors vous pouvez vouloir regarder les parameters de table évalués (SQL 2008 seulement):

http://msdn.microsoft.com/en-us/library/bb675163.aspx

(Tout d'abord, je voudrais aller avec le conseil ci-dessus et jeter un oeil à un ORM comme LINQ – cela va prendre la lourdeur du problème)