//封装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没得到值,如果是不会,正程序就有问题
跟踪一下就知道答案了