在其他查询中使用查询结果

时间:2015-01-27 13:37:14

标签: c# asp.net visual-studio-2010 sql-server-2008

我遇到了问题,希望你能帮助我。 我必须在同一个按钮中使用查询的结果,当我执行此代码时,我有:已经有一个与此命令关联的打开的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");
}

2 个答案:

答案 0 :(得分:0)

  

已经有一个与此命令关联的打开DataReader,必须先关闭它。

您需要处理数据读取器,例如:

using(var reader = cmd.ExecuteReader())
{
   if (reader.Read())
   {
       ...
   }
}

退出using块将导致数据阅读器被处理,您可以再次ExecuteReader

答案 1 :(得分:0)

在代码中的reader.Close();之前输入cmd.CommandText = "SELECT IDENT_CURRENT('Insp')";