我遇到了问题,希望你能帮助我。 我必须在同一个按钮中使用查询的结果,当我执行此代码时,我有:已经有一个与此命令关联的打开的DataReader,必须先关闭它。
protected void Button1_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
//use a sqlparameter to avoid the possibility of sql injection
SqlParameter p = new SqlParameter("p1", ddlClients.SelectedValue);
SqlParameter q = new SqlParameter("q1", ddlProjets.SelectedValue);
SqlParameter t = new SqlParameter("t1", ddlProduits.SelectedValue);
SqlParameter r = new SqlParameter("r1", ddlShift.SelectedValue);
SqlParameter s = new SqlParameter("s1", ddlDefaut.SelectedValue);
cmd.Parameters.Add(p);
cmd.Parameters.Add(q);
cmd.Parameters.Add(r);
cmd.Parameters.Add(s);
cmd.Parameters.Add(t);
cmd.CommandText = "insert into Aff (Operations_ID, Emplacements_ID, Projets_ID, Zones_ID, Machines_ID )values(15, 25, @p1, 1, 5)";
cmd.CommandText = "SELECT IDENT_CURRENT('Aff')";
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
cmd.CommandText = "insert into Insp (Affectations_ID, Shifts_ID, Produits_ID, date, Machine) values(reader ,@r1, @t1, '" + TextBox1.Text + "', '" + TextBox2.Text + "')"; // here is the problem
}
cmd.CommandText = "SELECT IDENT_CURRENT('Insp')";
SqlDataReader reader2 = cmd.ExecuteReader();
if (reader2.Read())
{
cmd.CommandText = "insert into def (BaseDefauts_ID, Inspection_ID, matricule, quantite) values(@s1, reader2, '" + TextBox3.Text + "', '" + TextBox4.Text + "')";
}
cmd.ExecuteNonQuery();
con.Close();
Response.Redirect("Cascad.aspx");
}
答案 0 :(得分:0)
已经有一个与此命令关联的打开DataReader,必须先关闭它。
您需要处理数据读取器,例如:
using(var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
...
}
}
退出using
块将导致数据阅读器被处理,您可以再次ExecuteReader
。
答案 1 :(得分:0)
在代码中的reader.Close();
之前输入cmd.CommandText = "SELECT IDENT_CURRENT('Insp')";
。