通过查询调用存储过程并在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;
}
答
尝试此运行该查询在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);
你说过你不想做什么,但不是你想做什么。你通过不使用参数试图完成什么? – 2009-07-06 14:18:39
查看上面的编辑。 – majkinetor 2009-07-06 14:42:21