我在C#中有此代码,我想在我的代码中使用字符串sReturn作为输出参数。

var sReturn = new SqlParameter();
sReturn.ParameterName = "@Return";
sReturn.SqlDbType = SqlDbType.VarChar;
sReturn.Size = 300;
sReturn.Direction = ParameterDirection.Output;

string query = "exec @Return = sqlServerProcedure @id, @dateBegin, @dateEnd";

_context.Database.CommandTimeout = timeout;
_context.Database.ExecuteSqlCommand
            (query, sReturn,
                new SqlParameter("@id", id),
                new SqlParameter("@dateBegin", dateBegin),
                new SqlParameter("@dateEnd", dateEnd) );
 return sReturn.Value;


sReturn始终返回0。

过程是这样的:

CREATE PROCEDURE [dbo].sqlServerProcedure
     (@dateBegin DATETIME,
      @dateEnd DATETIME,
      @id NUMERIC)
AS
BEGIN
    SELECT 'some random message'
END


为什么总是返回0?

最佳答案

您确实不需要声明@return参数,如果希望过程中有单个值,请使用SQL ExecuteScalar()command方法。

您也可以使用存储过程类型而不是内联SQL查询。您的ADO.net代码如下所示,存储过程未更改。

_context.Database.Connection.Open();
var cmd = _context.Database.Connection.CreateCommand();
cmd.CommandTimeout = timeout;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sqlServerProcedure";
cmd.Parameters.Add(new SqlParameter("@id", id));
cmd.Parameters.Add(new SqlParameter("@dateBegin", dateBegin));
cmd.Parameters.Add(new SqlParameter("@dateEnd", dateEnd));
var result = (string)cmd.ExecuteScalar();

关于c# - 为什么在EF ExecuteSqlCommand调用中SQL Server字符串输出参数返回0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51658535/

10-12 15:54