我在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/