通过查询调用存储过程并在C#中获取返回值而无需输出参数

问题描述:

是否有我可以通过EXEC执行存储过程(因此不在C#中指定CommandType.StoredProcedure)并获得结果?通过查询调用存储过程并在C#中获取返回值而无需输出参数

我试图执行查询

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

,然后抢@R但没有成功。

我不想要的是通过添加参数并使用ParameterDirection.ReturnValue来获得结果。

我会感谢任何信息。 Ty。 Ty。

编辑

有人问为什么。

我需要创建一个运行任何存储过程的小控制台程序,并获取它返回的任何类型的结果。该应用程序接受.config文件,其中描述了数据库conn和sp的名称。

现在,如果按照通常的方式,我需要为每个参数配置entery,或者如果调用通常的查询格式指定,那么我需要自己解析它。用户需要知道参数详细信息等...

这就是为什么我选择了exec方法。用户可以在一个密钥下指定配置文件存储过程和参数。

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

并没有多少考虑。在这些程序上工作的人不理解编程的东西,他们知道他们需要把一些文本作为参数(即隐式转换是神秘的)

该程序一般不会接受任何用户参数,除了inital配置,所以sql注入等不存在,即使注射检查可以移动到SP级别。

实现OFC变得微不足道:

const string runFormat = "exec ('declare @r varchar (1024);EXEC @r={0}{1};select @r')"; 

    public bool Run(string parameters, out string result) { 
     SqlConnection con = new SqlConnection(connectionString); 

     SqlCommand cmnd = new SqlCommand(String.Empty, con); 
     cmnd.CommandText = String.Format(runFormat, storedProcedure, parameters ?? String.Empty); 

     try { 
      con.Open(); 
      result = (string)cmnd.ExecuteScalar(); 
     } 
     catch (Exception e) { 
      result = e.Message; 
      return false; 
     } 
     return true; 
    }  
+1

你说过你不想做什么,但不是你想做什么。你通过不使用参数试图完成什么? – 2009-07-06 14:18:39

+0

查看上面的编辑。 – majkinetor 2009-07-06 14:42:21

尝试此运行该查询在C#:

EXEC( '声明@r INT; EXEC @ R =测试1,2;选择@r')

,因为它在没有任何外界的知识批处理的声明无法得到@R举行。 BLToolkit营救(大约):

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