我是否可以通过 EXEC 执行存储过程(因此不在 C# 中指定 CommandType.StoredProcedure
)并获得结果?
我尝试执行查询
DECLARE @R int
EXEC @R = proc p1, p2
然后去抓取@R但没有成功。
我不希望以通常的方式添加参数并使用 ParameterDirection.ReturnValue
获取结果。
如有任何信息,我将不胜感激。 泰。
编辑
有人问为什么。
我需要创建一个小控制台程序来运行任何存储过程并获取它返回的任何类型的结果。该应用程序接受带有数据库连接描述和 sp 名称的 .config 文件。
现在,如果我按照通常的方式进行操作,我需要为每个参数输入配置项,或者如果调用是以通常的查询格式指定的,那么我需要自己解析它。用户需要了解详细参数等...
这就是我选择 exec 方法的原因。用户可以在配置文件中一键指定存储过程和参数。
<add key="Procedure" value="dbo.TEST 10,20"/>
不要想太多。从事此类程序的人不了解编程知识,他们知道他们需要将一些文本作为参数(即隐式转换是个谜)
该程序通常不会接受除初始配置之外的任何用户参数,因此不存在 sql 注入(inject)等,即使关注注入(inject)检查也可以移至 SP 级别。
c 的实现变得微不足道:
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=testing 1,2;select @r')
关于c# - 通过查询调用存储过程并在没有输出参数的情况下在C#中获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087200/