我试图从我的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
调用存储过程的代码:
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();
我也尝试过使用a DataSet检索具有相同结果的返回值。我缺少从存储过程中获取返回值的东西吗?如果需要更多信息,请告诉我。
DataSet
您需要在命令中添加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; }