首页 新闻 会员 周边

函数改变了代入参数的值,是怎么做到的呢

0
悬赏园豆:5 [已解决问题] 解决于 2012-02-20 16:18

public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
  {
  using (SqlConnection connection = new SqlConnection(factorychoice()))
  {
  SqlCommand cmd = new SqlCommand();
  PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  {
  DataSet ds = new DataSet();
  try
  {
  da.Fill(ds, "ds");
  cmd.Parameters.Clear();
  }
  catch (System.Data.SqlClient.SqlException ex)
  {
  throw new Exception(ex.Message);
  }
  return ds;
  }
  }
  }
以上的代码高人所写,我所纳闷的是下面这几句代码
 SqlCommand cmd = new SqlCommand();
  PrepareCommand(cmd, connection, null, SQLString, cmdParms);
cmd的值经过PrepareCommand函数后,里面的参数改变了,这是为什么呢, PrepareCommand函数如下
 private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, 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 = CommandType.Text;//cmdType;
  if (cmdParms != null)
  {
  foreach (SqlParameter parameter in cmdParms)
  {
  if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  (parameter.Value == null))
  {
  parameter.Value = DBNull.Value;
  }
  cmd.Parameters.Add(parameter);
  }
  }
  }

我用控制台模拟了一下,并未改变,代码如下
  class Program
  {
  static void Main(string[] args)
  {
  int i = 3;
  addvale(i);
  Console.Write(i.ToString());
  Console.ReadKey();
  }
  public static void addvale(int ii)
  {
  ii = ii + 5;
  }
  }
高人帮忙解答一下,谢谢.

zhengyingcan的主页 zhengyingcan | 初学一级 | 园豆:12
提问于:2012-02-18 08:42
< >
分享
最佳答案
0

楼上说的不错,你要理解的是值类型与引用类型的区别,参考示例:http://msdn.microsoft.com/zh-cn/library/s6938f28(v=vs.100).aspx

收获园豆:4
artwl | 专家六级 |园豆:16736 | 2012-02-18 10:14

引用类型就不用 ref 关键字 吗

zhengyingcan | 园豆:12 (初学一级) | 2012-02-18 10:15

@zhengyingcan: 示例你看了吗,示例中第一个例子传入的是一个数组地址(引用类型),所以在Change方法中改变值后在Main方法中的值也改变了(为888)

在你的代码中传入的是一个SqlCommand,这是一个类,类也是引用类型的

artwl | 园豆:16736 (专家六级) | 2012-02-18 10:19
其他回答(1)
0

值类型与引用类型之分

收获园豆:1
小小刀 | 园豆:1991 (小虾三级) | 2012-02-18 09:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册