首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

函数改变了代入参数的值,是如何做到的呢

2012-04-03 
函数改变了代入参数的值,是怎么做到的呢public static DataSet Query(string SQLString, params SqlParame

函数改变了代入参数的值,是怎么做到的呢
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;
  }
  }
高人帮忙解答一下,谢谢.

[解决办法]
需要改传入参数,前边需要加ref
举个例子

C# code
class Program    {        static void Main(string[] args)        {            StringBuilder builder = new StringBuilder();            builder.Append("1111");            StringBuilder builder2 = builder;            Change1(builder);            Console.WriteLine("Change1");            Console.WriteLine(object.ReferenceEquals(builder,builder2).ToString());            Console.WriteLine(builder.ToString());            Console.WriteLine(builder2.ToString());            Change2(ref builder);            Console.WriteLine("Change2");            Console.WriteLine(object.ReferenceEquals(builder, builder2).ToString());            Console.WriteLine(builder.ToString());            Console.WriteLine(builder2.ToString());            Console.ReadKey();        }        static void Change1(StringBuilder builder)        {            builder = new StringBuilder();            builder.Append("2222");        }        static void Change2(ref StringBuilder builder)        {            builder = new StringBuilder();            builder.Append("2222");        }    } 


[解决办法]
因为cmd是引用类型。(字符串例外)
[解决办法]
下面那个函数本身就是修改cmd属性的,cmd能不变吗。。。。

热点排行