默认是输入参数
Output 是输出参数
InputOutput 即做输入又做输出参数

解决方案 »

  1.   

    输入参数 的值 是在执行存储过程前 设定好的,而 输出参数则是 执行存储过程后 才能得到
    就是 
    int val = cmd.ExecuteNonQuery(); 
    这句。这个得到输出参数写法是有些问题的foreach (SqlParameter q in cmdParms)
                                {
                                    if (q.Direction == ParameterDirection.Output)
                                    {
                                        indentity = Convert.ToInt32(q.Value);
                                    }
                                } 
    这只能得到最后一个输出参数的值,并且转换成int 了,而且调用这个函数的人还不知道输出参数的值,因为没有返回。
      

  2.   

    foreach (SqlParameter q in cmdParms) 
                                { 
                                    if (q.Direction == ParameterDirection.InputOutput) 
                                    { 
                                        q.Value = indentity; 
                                    } 
                                } 
    这个写法有问题,我说的是从语法规则上看 是错误的,q.Value = indentity; 这个赋值语句在foreach里面是有问题的,foreach是只读循环
      

  3.   

    public enum ParameterDirection
        {
            // 参数是输入参数。
             Input = 1,
            // 参数是输出参数。
             Output = 2,
            //  参数既能输入,也能输出。
             InputOutput = 3,
            //  参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。
             ReturnValue = 6,
         }   
    .Net中的参数定义为形式参数 而把存储过程的参数定义为实际参数
    foreach (SqlParameter q in cmdParms) 
       { 
           if (q.Direction == ParameterDirection.InputOutput) 
             { 
                q.Value = indentity; 
             }
      } 
    里只能取值
     foreach (SqlParameter p in parameters)
       {
        if( p!= null )
        {
         if ( ( p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input ) && 
          (p.Value == null))
         {
          p.Value = DBNull.Value;
         }
         command.Parameters.Add(p);
        }