日期:2014-05-17  浏览次数:20395 次

ReturnValue到底指的是什么意思 百度了一天 还是不能完全明白
最近在学习 三层架构,总是不明白ReturnValue是代表什么,特地来请请教了   麻烦做到的 告诉哈   谢谢 

1:请教哈 new SqlParameter("ReturnValue".....)ReturnValue指的什么 ,定义的一个参数还是返回的一个 参数?有什么作用命名,规则必须ReturnValue吗  我可以不可以自己 随便取一个名字
2:cmd.Parameters["ReturnValue"].Value值是就我这个sql语句返回的结果吗,sql得到的结果是一个数据集    怎么 输出的结果是0呢 
 protected void Button1_Click(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection("Data Source=(local);DataBase=db_JiaoYou;User ID=sa;PWD=67777");
        con.Open();
        string sql="select * from t1";
        SqlCommand cmd=new SqlCommand(sql,con);
        cmd.CommandType = CommandType.Text;
         cmd.Parameters.Add(
         new SqlParameter("ReturnValue", SqlDbType.Int, 4,
         ParameterDirection.ReturnValue, false, 0, 0,
         string.Empty, DataRowVersion.Default, null));
try
        {
   cmd.ExecuteNonQuery();
    Response.Write((int)cmd.Parameters["ReturnValue"].Value);   
       
            
            }
        catch (Exception err)
        {

            Label1.Text = err.Message;

        }
        
        }

------解决方案--------------------
我来简单解释一下吧。不一定完全正确,但应该是这样的。
1、LZ所谓的Return_Value并不是LS几位理解的那样--一个普通的用户变量。实际上,这是一个特殊变量,是固定存在的,并不因为你不设置@Return_Value就不存在;
2、LZ贴出来的那篇贴子,对Return_Value理解是错误的,因此,会误导LZ的理解,原因见下;
3、这个Return_Value,默认是INT类型的,LZ可以试试将其变更为其它类型,你会发现SQL直接报错(直接在SQL的存储过程里最后一行写类似Return @@ServerName返回为非INT类型),那么也就是说,该特殊变量,只可以为INT类型,因此,得出结论1--该变量是个用于特殊用途的变量,而不是普通变量(返回你想要的值)
4、实际上,该变量返回的是错误码(如果有错误的话),根据该错误码,SQL SERVER会自动寻找到该错误码对应的内容,返回给你。也就是说,一般情况下,该特殊变量是用不到的。
5、如果像那篇贴子说的那样,强制其返回例如@@RowCount,不是不可以,而是这样的话,你就得不到错误码了;
6、因此,如果我们需要在存储过程中返回我们的某个变量,例如:新插入记录的ID(自动生成),那么我们应该专门设置一个变量,Direction为output,然后在程序端,来获取这个自定义变量,以得到新ID,而不是将其通过Return_Value来获得。