SqlCommand cmd = new SqlCommand("sp_InsertPhoto", sqlConn);
           cmd.CommandType = CommandType.StoredProcedure;           SqlParameter param = cmd.Parameters.Add("RETURN_VALUE", SqlDbType.Int);//添加用于获取返回值的参数
           param.Direction = ParameterDirection.ReturnValue;//设置该命令参数为返回值           cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = strName;
           cmd.Parameters.Add("@image", SqlDbType.Image).Value = buffer;
           cmd.Parameters.Add("@album", SqlDbType.Int).Value = cateid;           cmd.ExecuteNonQuery();              int nID = (int)cmd.Parameters["RETURN_VALUE"].Value;//使用返回值以上是用于具有返回值的存储过程时,在C#中使用命令参数的写法,那么如果param.Direction = ParameterDirection.output;时该如何添加参数呢??
如下写法对吗?
int num=0;
     SqlParameter param = cmd.Parameters.Add("OUT_VALUE", out num);
           param.Direction = ParameterDirection.output;
默认是不是input的呢??

解决方案 »

  1.   

    SqlParameter paroutput=borrowbook.Parameters.Add("@BookNumber",SqlDbType.Int);
    输出时候的写法如下:
    paroutput.Direction=ParameterDirection.Output;
    try
    {
    this.sqlConnection1.Open();
    borrowbook.ExecuteNonQuery();
    this.sqlConnection1.Close();
    return Convert.ToInt32(paroutput.Value);//使用该输出值

    }我想问下,默认的话是input 还是output 还是双相的,如果双相的话该值是怎么设置的?
      

  2.   

    你不是给了一个方法吗?
    SqlParameter param = cmd.Parameters.Add("RETURN_VALUE", SqlDbType.Int);//添加用于获取返回值的参数
    param.Direction = ParameterDirection.ReturnValue;//设置该命令参数为返回值错,没这种写法,那个Add方法就没这种重载形式。其实默认是input,所以不用指定,改为了output后,可以不用指定输入的值。
    当执行了cmd.ExecuteNonQuery()后,你可以直接访问该参数,读取其Value值,例如:
    int retvalue = cmd.Parameters["RETURN_VALUE"].Value;
      

  3.   

    Input 只用于将信息从应用程序传输到存储过程。 
    InputOutput 可将信息从应用程序传输到存储过程,并将信息从存储过程传输回应用程序。 
    Output 只用于将信息从存储过程传输回应用程序。 
    ReturnValue 表示存储过程的返回值。SQL Server 的存储过程参数列表中不显示该参数。它只与存储过程的 RETURN 语句中的值相关联。 
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServer"].ToString());
    conn.Open();
    SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
    MyCommand.CommandType = CommandType.StoredProcedure;
    MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
    MyCommand.Parameters["@a"].Value = 20;
    MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
    MyCommand.Parameters["@b"].Direction = ParameterDirection.Output;
    MyCommand.ExecuteNonQuery();
    Response.Write(MyCommand.Parameters["@b"].Value.ToString());