我有一点不明白。
我在学习SqlHelper的时候`被一个问题搞得很郁闷。
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {            SqlCommand cmd = new SqlCommand();            using (SqlConnection conn = new SqlConnection(connectionString)) {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }这里定义了cmd。。但是并没有给他的属性进行设定。
但是我觉得。
似乎是PrepareCommand方法对cmd相关属性进行了设定。
但是PrepareCommand方法并没有任何返回类型。
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);
            }而程序执行完PrepareCommand方法之后就马上执行了
cmd.ExecuteNonQuery();
请问SqlHelper类的ExecuteNonQuery方法中的cmd的相关属性是怎么进行设定的?
如果是通过PrepareCommand方法设定的cmd属性。那么ExecuteNonQuery方法中是怎么得到PrepareCommand方法中的cmd的相关属性?PrepareCommand是没有返回类型的方法。。
我实在想不通```郁闷`。。麻烦高手?
谢谢咯!

解决方案 »

  1.   

    自己写一个吧,好用多了http://www.cnblogs.com/jyk/category/67121.html
      

  2.   

    cmd 是引用类型,所以传的是引用,在PrepareCommand内部的修改直接影响到外部的cmd,可以写一个简单的程序验证这一点    class Porgrame
        {
            static void Main(string[] args)
            {
                TextClass c1 = new TextClass();
                c1.Str = "初始值";
                Console.WriteLine(c1.Str);
                ChangeStr(c1);
                Console.WriteLine(c1.Str);
                Console.Read();
            }        private static void ChangeStr(TextClass c1)
            {
                c1.Str = "修改过的值";
            }
        }    class TextClass
        {
            private String str;        public String Str
            {
                get { return str; }
                set { str = value; }
            }    }程序输出: 
    初始值
    修改过的值
      

  3.   

    因为SqlCommand是引用类型
    SqlCommand cmd = new SqlCommand();在方法PrepareCommand的参数里实际上是传的cmd的引用(地址)
    在PrepareCommand里操作的参数cmd和实际cmd是一个地址的对象.
      

  4.   

    SqlCommand是引用类型
    估计这位老兄以前学的c,c++之类的语言