关于 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();)是个好习惯,会给你减少后面带来的没必要的麻烦 --------------------编程问答--------------------
“不用工厂方法创建”的意思是:排除 SqlCommand 对象会有二次使用。
“静态方法”的意思是:在静态方法里面创建的 SqlCommand 对象线程安全。
其实我只想知道,Asp.Net 的情况下,多线程(多用户)调用这个静态的 Excute 方法里面的 SqlCommand 对象的 SqlParameter 是否不用清理。
补充:.NET技术 , ASP.NET