문제가있어서 도움을 주시면 감사하겠습니다. 이 코드를 실행할 때 같은 단추에서 다른 쿼리의 결과를 사용해야합니다. 먼저 닫아야하는이 명령과 연결된 열린 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");
}
캔트 당신은 그냥 첫 번째 결과의 새로운 "쿼리"에 가입 할 수있는 그런 식으로 참여할 수 있습니까? – Shocklo
IMO 하나의 쿼리에서 (그리고 SQL 연결 대신 매개 변수를 사용하여) 모든 작업을 수행 할 수 있습니다. ... 어쨌든 ... SqlDataReader는 매번 사용 후 (연결시에도 동일하게) 폐기되어야합니다 (MUST). –
CommandText를 다시 설정할 경우 알림이 작동하지 않습니다. 첫 번째 SQL은 후자로 대체됩니다. 첫 번째 명령을 실행하거나 단일 명령 텍스트로 결합해야합니다. –