如何从C#中的存储过程中获取所选值?

时间:2013-03-22 18:20:52

标签: c# sql-server stored-procedures

在查看存储过程时,逻辑似乎是“do stuff”,然后是select 1 as add_success。如何检查C#中的add_success值?

代码

using (SqlConnection connection = new SqlConnection(_connectionString)) {
  using (SqlCommand command = new SqlCommand("<sprocname>", connection)) {
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add(<a parameter>); // x10 or so
    connection.Open();
    var result = command.ExecuteNonQuery();
    // result is always -1, despite the sproc doing everything it is supposed to do (modify a few different tables)

存储过程

// Do some stuff including inserts on a few different tables, then
INSERT INTO Table (field1, field2)
VALUES (@Val1, @Val2)

SELECT 1 AS add_success

似乎正在正确地执行所有操作,但ExecuteNonQuery的默认返回是受影响的行,即使所有操作都成功完成,也始终为-1

我还尝试添加一个名为add_success@add_success的返回值的参数,但这似乎也无效。

如何从存储过程向C#返回值?

2 个答案:

答案 0 :(得分:7)

  1. 您需要使用command.ExecuteScalar()
  2. 结果将是结果集中第一个表的第一行。

答案 1 :(得分:1)

尝试SqlCommand.ExecuteScalar()方法而不是ExecuteNonQuery()source)。