//封装ExecuteNonQuery
        public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
    int res = -1;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    if (parameters != null && parameters.Length > 0)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }
res=cmd.ExecuteNonQuery();
       return res;
                }
            }
        }
我封转了ExecuteNonQuery()方法,当执行的SQL语句为delete....时,res拿不到返回值,值总是为0,不知道是为什么?而且会抛出“另一个 SqlParameterCollection 中已包含 SqlParameter”的异常情况,这是怎么回事呢?
说明你没有delete 成功, 你传入的SqlParameters 已经在别的 command中存在了, 你应该在调用别的cmd之后 加入cmd.Parameters.Clear(); 清空Command Parameters , 这样就可以解决了。
清空Command Parameters能够解决抛出的异常问题,可是我不知道为什么要这样做?每次都SqlCommand cmd = conn.CreateCommand(),为什么还会出现这现象呢?
连接池的问题,Command对象最好new一个,或者传参前清一下
可以找找带参数的sql,是如何编写的。
return res+"111";
看一下111会不会输出,如果是会,说明res没得到值,如果是不会,正程序就有问题
跟踪一下就知道答案了