Wes*_*ley 72 c# sql-server ado.net stored-procedures return-value
我试图从我的C#windows应用程序调用存储过程.存储过程在SQL Server 2008的本地实例上运行.我能够调用存储过程但我无法从存储过程中检索该值.该存储过程应该返回序列中的下一个数字.我在网上做过研究,我见过的所有网站都指出这个解决方案有效.
存储过程代码:
ALTER procedure [dbo].[usp_GetNewSeqVal]
@SeqName nvarchar(255)
as
begin
declare @NewSeqVal int
set NOCOUNT ON
update AllSequences
set @NewSeqVal = CurrVal = CurrVal+Incr
where SeqName = @SeqName
if @@rowcount = 0 begin
print 'Sequence does not exist'
return
end
return @NewSeqVal
end
Run Code Online (Sandbox Code Playgroud)
调用存储过程的代码:
SqlConnection conn = new SqlConnection(getConnectionString());
conn.Open();
SqlCommand cmd = new SqlCommand(parameterStatement.getQuery(), conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter();
param = cmd.Parameters.Add("@SeqName", SqlDbType.NVarChar);
param.Direction = ParameterDirection.Input;
param.Value = "SeqName";
SqlDataReader reader = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
我也尝试使用a DataSet来检索具有相同结果的返回值.从存储过程中获取返回值我错过了什么?如果需要更多信息,请告诉我.
Ale*_*Aza 139
您需要将return参数添加到命令:
using (SqlConnection conn = new SqlConnection(getConnectionString()))
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = parameterStatement.getQuery();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("SeqName", "SeqNameValue");
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
conn.Open();
cmd.ExecuteNonQuery();
var result = returnParameter.Value;
}
Run Code Online (Sandbox Code Playgroud)
我知道这很旧,但我在谷歌上偶然发现了它。
如果您的存储过程中有返回值,请说“返回 1” - 不使用输出参数。
您可以执行以下操作 - "@RETURN_VALUE" 以静默方式添加到每个命令对象中。无需明确添加
cmd.ExecuteNonQuery();
rtn = (int)cmd.Parameters["@RETURN_VALUE"].Value;
Run Code Online (Sandbox Code Playgroud)
我的机器上的 EnterpriseLibrary 版本还有其他参数。这是有效的:
SqlParameter retval = new SqlParameter("@ReturnValue", System.Data.SqlDbType.Int);
retval.Direction = System.Data.ParameterDirection.ReturnValue;
cmd.Parameters.Add(retval);
db.ExecuteNonQuery(cmd);
object o = cmd.Parameters["@ReturnValue"].Value;
Run Code Online (Sandbox Code Playgroud)