0

我只是无法解决这个问题。我有一个带有 C# 的简单页面,其表单将一些数据存储在数据库中。我的问题是 click 事件触发了两次,因此存储了我的数据的两倍。我在任何地方都找不到该事件被调用两次的地方。有什么帮助吗?泰!(这是我的按钮:)

  <div id="submit_buttons">
      <asp:Button id="btnAgregar" runat="server" Text="Enviar" CausesValidation="true" OnClick="btnAgregar_Click"/>
  </div>

这是我背后的代码:

    protected void btnAgregar_Click(object sender, CommandEventArgs e)
    {

        //insertamos proyectos
        SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
        SqlCommand sqlComm = new SqlCommand();
        sqlComm = sqlConn.CreateCommand();
        sqlComm.CommandText = @"INSERT INTO proyectos (nombre, descripcion, archivo, idRegion, idCategoria) OUTPUT INSERTED.ID VALUES (@nombre,@descripcion, @archivo, @region, @categoria)";
        sqlComm.Parameters.Add("@nombre", SqlDbType.VarChar);
        sqlComm.Parameters["@nombre"].Value = this.proy_nombre.Value;

        sqlComm.Parameters.Add("@archivo", SqlDbType.VarBinary);
        sqlComm.Parameters["@archivo"].Value = this.archivo.FileBytes;

        sqlComm.Parameters.Add("@region", SqlDbType.Int);
        sqlComm.Parameters["@region"].Value = this.cmbRegion.SelectedValue;

        sqlComm.Parameters.Add("@categoria", SqlDbType.VarChar);
        sqlComm.Parameters["@categoria"].Value = this.cmbCategoria.SelectedValue;

        sqlComm.Parameters.Add("@descripcion", SqlDbType.Text);
        sqlComm.Parameters["@descripcion"].Value = this.p_descripcion.Value;

        sqlConn.Open();

        sqlComm.ExecuteNonQuery();
        int lastID = (int)sqlComm.ExecuteScalar();

        //insertamos concursantes
        SqlCommand sqlCommConcursantes = new SqlCommand();
        sqlCommConcursantes = sqlConn.CreateCommand();
        sqlCommConcursantes.CommandText = @"INSERT INTO concursantes(nombre, email,titulo, idArea) OUTPUT INSERTED.ID VALUES (@nombre,@email, @titulo, @idArea)";
        sqlCommConcursantes.Parameters.Add("@nombre", SqlDbType.VarChar);
        sqlCommConcursantes.Parameters["@nombre"].Value = this.c1_nombre.Value;

        sqlCommConcursantes.Parameters.Add("@email", SqlDbType.VarChar);
        sqlCommConcursantes.Parameters["@email"].Value = this.c1_email.Value;

        sqlCommConcursantes.Parameters.Add("@titulo", SqlDbType.VarChar);
        sqlCommConcursantes.Parameters["@titulo"].Value = this.c1_titulo.Value;

        sqlCommConcursantes.Parameters.Add("@idArea", SqlDbType.Int);
        sqlCommConcursantes.Parameters["@idArea"].Value = this.c1_area.Value;

        sqlCommConcursantes.ExecuteNonQuery();
        int lastIDConcursantes = (int)sqlCommConcursantes.ExecuteScalar();

        //asociamos proyectos con concursantes.
        SqlCommand sql = new SqlCommand();
        sql = sqlConn.CreateCommand();
        sql.CommandText = @"INSERT INTO proyectos_concursantes(idProyecto, idConcursante) VALUES (@idP,@idC)";
        sql.Parameters.Add("@idP", SqlDbType.Int);
        sql.Parameters["@idP"].Value = lastID;

        sql.Parameters.Add("@idC", SqlDbType.Int);
        sql.Parameters["@idC"].Value = lastIDConcursantes;

        sql.ExecuteNonQuery();

        sqlConn.Close();

        Response.Redirect("About.aspx");       

    }
4

1 回答 1

4

你执行你的命令两次:

sqlComm.ExecuteNonQuery();
int lastID = (int)sqlComm.ExecuteScalar();
于 2013-06-26T02:56:46.773 回答