我的方法中有很多查询。根据条件,执行特定查询。每个查询都使用相同的参数。
例如:
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
,我的问题是会出现错误,或者在查询执行后我的参数会被删除吗?
答案 0 :(得分:1)
您应该添加带有类型的参数,然后在需要时设置其值。这将确保类型始终正确。
话虽这么说,执行后参数不会被删除,如果密钥已经存在,AddWithValue
似乎不会抛出异常,这与之前的Add
不同。所以你应该能够再次添加参数。
当然,如果值相同且只有查询更改,则无需再次添加。
答案 1 :(得分:0)
首先使用所有参数准备命令对象,然后在循环中分配新值。
command.Parameters.Add("@id", SqlDbType.Int);
foreach (...) {
command.Parameters["@id"].Value = param1;
command.ExecuteNonQuery();
}