执行参数化查询后,参数是否会从 ParameterCollection 中删除?
Will parameter be removed from ParameterCollection after parametarized query is executed?
我的方法中有很多查询。根据条件,执行特定查询。每个查询使用相同的参数。
例如:
public static void Method(param1, param2, param3)
{
....
cmd.CommandType = CommandType.Text;
if(Condition1)
{
cmd.CommandText = "select * from Table1 where id=@id"
cmd.Parameters.AddWithValue("@id", param1);
cmd.ExecuteNonQuery();
foreach(int i in IntegerList)
{
....
cmd.CommandText = "insert into Table2(id,type,model) values(@id,@type,@model)
cmd.Parameters.AddWithValue("@id", param1);
cmd.ExecuteNonQuery();
....
}
}
else
{
cmd.CommandText="select * from Table3 where id = @id"
cmd.Parameters.AddWithValue("@id", param1);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
cmd.Dispose();
da.Dispose();
....
}
cmd.CommandText = "delete from Table3 where id = @id and model=@model..."
....
}
我的问题是,如果我每次需要执行不同的查询时,一直添加参数@id
会不会出错,或者我的参数会在查询执行后被删除?
您应该添加一个带有类型的参数,然后在需要时设置它的值。这将确保类型始终正确。
也就是说,参数在执行后不会被删除,而且如果键已经存在,似乎 AddWithValue
不会抛出异常,这与之前的 Add
不同。所以你应该可以再次添加参数。
当然,如果值相同,只是查询发生了变化,则不需要再次添加。
首先使用所有参数准备您的命令对象,然后在循环中分配新值。
command.Parameters.Add("@id", SqlDbType.Int);
foreach (...) {
command.Parameters["@id"].Value = param1;
command.ExecuteNonQuery();
}
我的方法中有很多查询。根据条件,执行特定查询。每个查询使用相同的参数。
例如:
public static void Method(param1, param2, param3)
{
....
cmd.CommandType = CommandType.Text;
if(Condition1)
{
cmd.CommandText = "select * from Table1 where id=@id"
cmd.Parameters.AddWithValue("@id", param1);
cmd.ExecuteNonQuery();
foreach(int i in IntegerList)
{
....
cmd.CommandText = "insert into Table2(id,type,model) values(@id,@type,@model)
cmd.Parameters.AddWithValue("@id", param1);
cmd.ExecuteNonQuery();
....
}
}
else
{
cmd.CommandText="select * from Table3 where id = @id"
cmd.Parameters.AddWithValue("@id", param1);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
cmd.Dispose();
da.Dispose();
....
}
cmd.CommandText = "delete from Table3 where id = @id and model=@model..."
....
}
我的问题是,如果我每次需要执行不同的查询时,一直添加参数@id
会不会出错,或者我的参数会在查询执行后被删除?
您应该添加一个带有类型的参数,然后在需要时设置它的值。这将确保类型始终正确。
也就是说,参数在执行后不会被删除,而且如果键已经存在,似乎 AddWithValue
不会抛出异常,这与之前的 Add
不同。所以你应该可以再次添加参数。
当然,如果值相同,只是查询发生了变化,则不需要再次添加。
首先使用所有参数准备您的命令对象,然后在循环中分配新值。
command.Parameters.Add("@id", SqlDbType.Int);
foreach (...) {
command.Parameters["@id"].Value = param1;
command.ExecuteNonQuery();
}