首页 新闻 会员 周边

ExecuteNonQuery执行delete sql语句返回值拿不到?

0
悬赏园豆:10 [已解决问题] 解决于 2012-09-17 08:37

 //封装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”的异常情况,这是怎么回事呢?

C#
竹墨轩的主页 竹墨轩 | 初学一级 | 园豆:58
提问于:2012-09-11 23:01
< >
分享
最佳答案
0

说明你没有delete 成功,    你传入的SqlParameters 已经在别的 command中存在了,   你应该在调用别的cmd之后 加入cmd.Parameters.Clear();   清空Command Parameters , 这样就可以解决了。

收获园豆:8
gunsmoke | 老鸟四级 |园豆:3592 | 2012-09-12 09:09

清空Command Parameters能够解决抛出的异常问题,可是我不知道为什么要这样做?每次都SqlCommand cmd = conn.CreateCommand(),为什么还会出现这现象呢?

竹墨轩 | 园豆:58 (初学一级) | 2012-09-12 12:49
其他回答(4)
0

连接池的问题,Command对象最好new一个,或者传参前清一下

收获园豆:2
hardersen | 园豆:206 (菜鸟二级) | 2012-09-12 08:36
0

可以找找带参数的sql,是如何编写的。

chenping2008 | 园豆:9836 (大侠五级) | 2012-09-12 09:09
0

return res+"111";

看一下111会不会输出,如果是会,说明res没得到值,如果是不会,正程序就有问题

jason2013 | 园豆:1998 (小虾三级) | 2012-09-12 09:50
0

跟踪一下就知道答案了

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-09-12 10:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册