private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {            //判断数据库连接状态
            if (conn.State != ConnectionState.Open)
                conn.Open();            cmd.Connection = conn;
            cmd.CommandText = cmdText;            //判断是否需要事物处理
            if (trans != null)
                cmd.Transaction = trans;            cmd.CommandType = cmdType;            if (cmdParms != null)
            {
                foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }
        public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {            SqlCommand cmd = new SqlCommand();            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
            object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            return val;
        }上面2个方法,为什么ExecuteScalar方法中的cmd经过PrepareCommand就可以添加参数,不是函数不用ref,out不是进行copy处理的吗,为什么呢?

解决方案 »

  1.   

    不是函数不用ref,out不是进行copy处理的吗,为什么呢    ???  这话什么意思
      

  2.   

    楼主去看看 值类型 和应用类型的区别类是引用类型 所以不用ref  out  关键是进行 处理
      

  3.   

    http://www.cnblogs.com/wuhui369161243/archive/2009/05/13/1456142.html
    值类型: 
          单元直接存放“有效值” 
          如: 
          int a=3; 
          则a内存单元就放的是3       引用类型: 
          单元放的是另外一个对象的引用(地址) 
          如: 
          Form form1=new Form(); 
          就是说,在内存中开辟了一个对象new Form(),form1内存单元存放的是那个对象的地址,并非对象本身
      

  4.   

    举个简单的例子public void add(int a){a=a+1;}
    public staic void Main()
    {
    int s=5;
    add(s);
    System.Colsone.Out.Write(s);
    }
    打印结果是5;add(s)不改变s原始值!而上面的例子却可以这样把参数传给cmd
    为什么