在ADO.NET中,当你调用一个存储过程,需要一个参数,你需要给该参数,如果还它是一个输出参数。
using(SqlConnection cnn = new SqlConnection(.....))
using(SqlCommand cmd = new SqlCommand("StoredProcedure1", cnn))
{
cnn.Open();
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter p = new SqlParameter("@oResult", SqlDbType.Int);
p.Direction = ParameterDirection.Output;
cmd.Parameters.Add(p);
cmd.ExecuteNonQuery();
int result = Convert.ToInt32(cmd.Parameters["@oResult"].Value);
}
当然,在存储过程,你应该设置以某种方式在其他的答案中所解释的@oResult参数,但如果您使用的OUTPUT参数没有必要返回相同的值。
但是,如果需要,您可以同时具有OUTPUT参数和RETURN值。在这种情况下,您的来自C#的呼叫应该是
using(SqlConnection cnn = new SqlConnection(.....))
using(SqlCommand cmd = new SqlCommand("StoredProcedure1", cnn))
{
cnn.Open();
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter p = new SqlParameter("@oResult", SqlDbType.Int);
p.Direction = ParameterDirection.Output;
cmd.Parameters.Add(p);
// Here the name @returnValue is arbitrary, you could call it whatever you like
SqlParameter r = new SqlParameter("@returnValue", SqlDbType.Int);
r.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(r);
cmd.ExecuteNonQuery();
int result = Convert.ToInt32(cmd.Parameters["@oResult"].Value);
int returnValue = Convert.ToInt32(cmd.Parameters["@returnValue"].Value);
}
但请记住,RETURN values are limited to Integer Expressions。
您能否显示调用此过程的C#代码?问题在那里。 – Steve 2014-10-08 06:49:54
@Steve:我没有写任何C#代码史蒂夫。我只是写了这个来学习'存储过程'。这只是一个'mssql sp'的权利? C#只是调用这个权利? – 2014-10-08 06:51:23
尝试选择@ oResult而不是@ @Result – artm 2014-10-08 06:51:49