黑马程序员技术交流社区

标题: sqlhelper 传入多parameter参数遇到的问题 [打印本页]

作者: 汪振    时间: 2013-3-1 09:21
标题: sqlhelper 传入多parameter参数遇到的问题
SqlHelper类,写的方法如下
  1. class SqlHelper
  2.     {
  3.         private static string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;

  4.         public static DataSet ExecuteDataSet(string sql, SqlParameter[] pars)
  5.         {
  6.             using (SqlConnection conn = new SqlConnection(constr))
  7.             {
  8.                 conn.Open();
  9.                 using (SqlCommand cmd = conn.CreateCommand())
  10.                 {
  11.                     cmd.CommandText = sql;
  12.                     foreach (SqlParameter par in pars)
  13.                     {
  14.                         cmd.Parameters.AddRange(pars);
  15.                     }
  16.                     DataSet dst = new DataSet();
  17.                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  18.                     adapter.Fill(dst);
  19.                     return dst;
  20.                 }
  21.             }
  22.         }
  23.     }
复制代码
在主程序里边调用的时候传入了两个参数,程序报异常了
  1. DataSet ds= SqlHelper.ExecuteDataSet("select * from T_tavle where d=@DDD or f=@fff",new SqlParameter[]{new SqlParameter("@DDD",231),new SqlParameter("@fff",213)});
  2.            foreach (DataRow row in ds.Tables[0].Rows)
  3.            {
  4.                string name = (string)row["s"];
  5.                MessageBox.Show(name);
  6.            }
复制代码
设置断点,第一次正常,第二次提示sqlparameter重复,求解

1.jpg (63.23 KB, 下载次数: 46)

1.jpg

作者: 颜晓峰    时间: 2013-3-1 11:54
                    {cmd.Parameters.AddRange(pars); }
改成 :
            if (Pars != null)
            {
                cmd.Parameters.AddRange(Pars);
            }
原因:
Add和AddRange

Add:将指定的对象添加到……中
AddRange:向…开头到末尾,添加数组

在群体操作时,使用AddRange取代Add
用AddRange可以让我们要加入的东西一次性加入,而不要每次都加一次。
因此:foreach()检索到第一个par时cmd.Parameters.AddRange(Pars);就已经将所有参数都添加了。第二次自然会出现重复的错误。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2