A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪振 中级黑马   /  2013-3-1 09:21  /  1730 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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, 下载次数: 31)

1.jpg

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

1 个回复

倒序浏览
  • 你的问题出在foreach()和AddRange()上。
  • 解决方法:
    foreach (SqlParameter par in pars)
                    {cmd.Parameters.AddRange(pars); }
改成 :
            if (Pars != null)
            {
                cmd.Parameters.AddRange(Pars);
            }
原因:
Add和AddRange

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

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



评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马