c# - 通过查询调用存储过程并在没有输出参数的情况下在C#中获取返回值

标签 c# sql-server stored-procedures ado.net

我是否可以通过 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/

相关文章:

c# - CertEnroll::CX509Enrollment::InstallResponse:找不到对象或属性。 0x80092004 (-2146885628)

sql-server - 从另一个 Docker 容器连接到在 Docker 容器中运行的 SQL Server 数据库

sql - 从父子表生成字符串树分支

mysql - 为mysql中的out参数分配变量值

mysql - 在mysql中编写存储过程时遇到locate问题

java - 调用存储过程 (MySQL) 从 Hibernate 中抛出异常

c# - RDLC 报告 : How can I repeat a group header on each page?

c# - C# ASP.Net MVC3 Razor 中的动态菜单

c# - 在其执行方法中访问 Task 实例

sql-server - 从 OLE DB 源加载表并替换重复的唯一值