gpt4 book ai didi

c# - 为什么 SQL Server 字符串输出参数在 EF ExecuteSqlCommand 调用中返回 0?

转载 作者:太空宇宙 更新时间:2023-11-03 19:42:17 25 4
gpt4 key购买 nike

我在 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 参数,如果您希望从过程中获得单个值,请使用ExecuteScalar()。 SQL的方法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# - 为什么 SQL Server 字符串输出参数在 EF ExecuteSqlCommand 调用中返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51658535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com