当前位置:编程学习 > C#/ASP.NET >>

关于 SqlCommand 里面的参数的问题,进来指点一下我吧



这图的代码是从 Discuz!NT 那里截图出来的,里面有一行:
cmd.Parameters.Clear();

这个是一个静态方法,如果我的 SqlCommand 对象不用工厂创建,直接在方法里面创建。
是不是就不需要进行“清理参数”这个操作呢?

因为我觉得这个虽然是一个静态方法,但是 SqlCommand 对象不是静态变量,所以线程是安全的。
所以我觉得没必要进行“清理参数”的操作(排除良好习惯之类的东西)。 --------------------编程问答--------------------
public static int ExecuteNonQuery(out int id, DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
            if (connection == null) throw new ArgumentNullException("connection");
            if (Provider.GetLastIdSql().Trim() == "") throw new ArgumentNullException("GetLastIdSql is \"\"");

            // 创建DbCommand命令,并进行预处理
            DbCommand cmd = Factory.CreateCommand();
            bool mustCloseConnection = false;
            PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);

            // 执行命令
            int retval = cmd.ExecuteNonQuery();
            // 清除参数,以便再次使用.
            cmd.Parameters.Clear();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = Provider.GetLastIdSql();
            ...
}


一楼图片的代码。 --------------------编程问答-------------------- cmd.Parameters.Clear();是将前面加的参数移出掉,准备添加新的参数
跟什么工厂模式、静态方法没任何关系,


所以我觉得没必要进行“清理参数”的操作,这个跟线程安全也是没关系,
总之,新查询时保持前面的参数是干净的(即cmd.Parameters.Clear();)是个好习惯,会给你减少后面带来的没必要的麻烦 --------------------编程问答--------------------
引用 2 楼 gxingmin 的回复:
cmd.Parameters.Clear();是将前面加的参数移出掉,准备添加新的参数
跟什么工厂模式、静态方法没任何关系,


所以我觉得没必要进行“清理参数”的操作,这个跟线程安全也是没关系,
总之,新查询时保持前面的参数是干净的(即cmd.Parameters.Clear();)是个好习惯,会给你减少后面带来的没必要的麻烦


“不用工厂方法创建”的意思是:排除 SqlCommand 对象会有二次使用。
“静态方法”的意思是:在静态方法里面创建的 SqlCommand 对象线程安全。

其实我只想知道,Asp.Net 的情况下,多线程(多用户)调用这个静态的 Excute 方法里面的 SqlCommand 对象的 SqlParameter 是否不用清理。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,