Appel de procédure stockée via une requête et obtention d'une valeur de return en C # sans parameters de sortie

Y at-il de toute façon que je puisse exécuter la procédure stockée via EXEC (ne spécifiant pas CommandType.StoredProcedure en C #) et get le résultat?

J'ai essayé d'exécuter la requête

 DECLARE @R int EXEC @R = proc p1, p2 

et puis pour saisir @R mais sans succès.

Ce que je ne veux pas, c'est de le faire comme d'habitude en ajoutant des parameters et en utilisant ParameterDirection.ReturnValue pour get le résultat.

J'apprécierais n'importe quelle information. Ty.

MODIFIER

Certaines personnes ont demandé pourquoi.

J'ai besoin de créer un petit programme de console qui exécute n'importe quelle procédure stockée et obtient n'importe quel genre de résultat qu'il renvoie. L'application accepte le file .config avec la description de la database conn et le nom de sp.

Maintenant, si je le fais de la manière habituelle, j'ai besoin de config entery pour chaque paramètre ou si l'appel est spécifié dans le format de requête habituel, alors j'ai besoin de l'parsingr moi-même. L'user a besoin de connaître les détails des parameters etc …

C'est pourquoi j'ai choisi l'approche exec. L'user peut spécifier dans la procédure stockée de file de configuration et les parameters sous une key.

  <add key="Procedure" value="dbo.TEST 10,20"/> 

et ne pense pas beaucoup à ce sujet. Les gens qui travaillent sur de tels programmes ne include pas les choses de programmation, ils savent qu'ils doivent mettre du text en argument (ie la conversion implicite est mystérieuse)

Le programme n'acceptera généralement pas les parameters de l'user sauf la configuration initiale, donc l'injection sql et ceux qui n'existent pas, et même si cela concerne le contrôle d'injection peut être déplacé au niveau SP.

La mise en œuvre de c devient sortingviale:

  const ssortingng runFormat = "exec ('declare @r varchar (1024);EXEC @r={0}{1};select @r')"; public bool Run(ssortingng parameters, out ssortingng result) { SqlConnection con = new SqlConnection( connectionSsortingng ); SqlCommand cmnd = new SqlCommand(Ssortingng.Empty, con); cmnd.CommandText = Ssortingng.Format(runFormat, storedProcedure, parameters ?? Ssortingng.Empty); try { con.Open(); result = (ssortingng)cmnd.ExecuteScalar(); } catch (Exception e) { result = e.Message; return false; } return true; } 

essayez ceci en exécutant cette requête en C #:

exec ('declare @r int; EXEC @ r = test 1,2; sélectionne @r')

Vous ne pouvez pas get @R car il est déclaré dans un lot qui n'a pas connaissance d'un monde extérieur. BLToolkit pour sauver (à peu près):

 [SqlQuery("declare @r int; exec @r = proc @p1, @p2; return @r")] public abstract object ExecProc(int @p1, int @p2);