none
Insertar, actualizar y eliminar en asp.net c# RRS feed

  • Pregunta

  • Buenos dias:

    Soy nueva en en esta aplicacion, me podrian orientar hice store procedure en sql para insertar:

                          

    ALTER PROCEDURE [dbo].[Sp_alumnos]
    (
    @nombre varchar(150),
    @carrera varchar(150),
    @numcontrol int
     )
    AS
    BEGIN

    SET NOCOUNT ON;
     INSERT INTO [dbo].[controlAlumnos]
               ([nombre]
          ,[carrera]
          ,[numcontrol]
             )

         VALUES
               (@nombre
               ,@carrera
               ,@numcontrol
               )

    END

    ahora en una pagina de asp, quiero mandar a llamar este procedimiento asi:

      private string myconsql = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ALUMNOS"].ToString();                

      private void btnguarda_Click(object s

    ender, EventArgs e)
        {


           InsertC MyC = new InsertC();
           Hashtable MyH = new Hashtable();
           try
           {

                MyH.Add("nombre", ddlnombre.SelectedValue);
                MyH.Add("carrera", txtcarr.Text);
                MyH.Add("numcontrol", txtnum.Text);

                if( MyC.InsertaC(MyH) == true)
                {
                Response.Write("<script>alert('Data Inserted Successfully!')</script>");
                }
                else
                {
                   Response.Write("Error");
                }
                }
                catch (Exception ex)
                {
               Response.Write(ex);
                }

    AQUI AL DAR CLICK EN GUARDAR NO ME AGREGA NADA, CUAL SERIA EL ERROR????????

    y en una clase tengo mi  "InsertC" asi:

     public bool InsertaC(Hashtable MyH)
        {

            bool vr = false;
            SqlConnection oconn = new SqlConnection(myconsql);
            try
            {
                oconn.Open();

                SqlCommand mycomman = new SqlCommand();
                mycomman.CommandText = "Sp_alumnos";
                mycomman.CommandType = CommandType.StoredProcedure;


                mycomman.Parameters.AddWithValue("@nombre", MyH["nombre"].ToString());
                mycomman.Parameters.AddWithValue("@carrera", MyH["carrera"].ToString());
                mycomman.Parameters.AddWithValue("@numcontrol", Convert.ToInt32(MyH["orden"]));
                mycomman.Connection = oconn;
                mycomman.ExecuteNonQuery();
                oconn.Close();
                vr = true;
            }
            catch (Exception )
            {
                vr = false;
            }
            return vr;
        } 

    no se si vaya bien lo qe haga en sql, clase o el en guardar????, espero de su ayuda con este problema, gracias..


    jueves, 3 de marzo de 2016 16:43

Respuestas

  • hola

    algunas recomendaciones

    - no uses un hastable, no es buena idea,crea una clase como ser

    public class Alumno
    {
        public string nombre{get;set;}
        public string carrera{get;set;}
        public int numcontrol {get;set;}
    
    }

    entonces defines

    public bool InsertaC(Alumno entity) { ....

    - la base de datos esta integrada al VS ? o sea puedes verla en el Solution Explorer, porque si es asi recuerda que al ejecutas se crea un copia en el \bin\Debug por lo que al volver a ejecutar se pierden los datos anteriores

    puede que este insertando pero si detienes la aplicacion para verificar los pierdas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 4 de marzo de 2016 10:49

Todas las respuestas

  • alguna ayuda, estoy usando sql server 2012 y uso store procedure 
    jueves, 3 de marzo de 2016 17:10
  • Creo que sería bueno que también indicaras como esta declarada tu cadena de conexion y si estás segura que si hay conexion con la bd.

    Por otra parte, ¿ No te marca algun error especifico?

    jueves, 3 de marzo de 2016 17:18
  • pues al inicio declaro

    private string myconsql = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ALUMNOS"].ToString();  

     string myconsql = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ALUMNOS"].ToString();
            SqlConnection con = new SqlConnection(myconsql);

    y no al ejecutar no me hace nada, ni marca error... que sera?


    jueves, 3 de marzo de 2016 17:22
  • ¿pero tu conexion la tienes declarada dentro de la clase donde tiene el metodo para insertar?

    y puedes mostrar tu cadena de conexion? 

    Me imagino que la tienes en un webconfig no?

    jueves, 3 de marzo de 2016 17:28
  •  using (SqlCnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConDB"].ConnectionString))
                    {
                        Dt = new DataTable();
                        using (SqlDa = new SqlDataAdapter(Sp, SqlCnn))
                        {
                            SqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
                            SqlDa.SelectCommand.CommandText = Sp;
                            SqlDa.SelectCommand.CommandTimeout = 0;
                            if (Params != null)
                            {
                                foreach (var Param in Params)
                                {
                                    if (!Param.Name.Contains("output_") || (Param.Name.Length > 3 && Param.Name.Substring(0, 2).Equals("o_")))
                                        SqlDa.SelectCommand.Parameters.AddWithValue("@" + Param.Name, Param.Value);
    
                                    else
                                    {
                                        output = true;
                                        OutPutParam = Param.Name;
                                        SqlDa.SelectCommand.Parameters.Add("@" + Param.Name, SqlDbType.VarChar).Direction = ParameterDirection.Output;
                                    }
                                }
                            }
    
                            SqlDa.Fill(Dt);
                        }
    mira si te sirve este ejemplo

    Att. Franklin Andino

    jueves, 3 de marzo de 2016 17:31
  •  using (SqlCnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConDB"].ConnectionString))
                    {
                        Dt = new DataTable();
                        using (SqlDa = new SqlDataAdapter(Sp, SqlCnn))
                        {
                            SqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
                            SqlDa.SelectCommand.CommandText = Sp;
                            SqlDa.SelectCommand.CommandTimeout = 0;
                            if (Params != null)
                            {
                                foreach (var Param in Params)
                                {
                                    if (!Param.Name.Contains("output_") || (Param.Name.Length > 3 && Param.Name.Substring(0, 2).Equals("o_")))
                                        SqlDa.SelectCommand.Parameters.AddWithValue("@" + Param.Name, Param.Value);
    
                                    else
                                    {
                                        output = true;
                                        OutPutParam = Param.Name;
                                        SqlDa.SelectCommand.Parameters.Add("@" + Param.Name, SqlDbType.VarChar).Direction = ParameterDirection.Output;
                                    }
                                }
                            }
    
                            SqlDa.Fill(Dt);
                        }
    mira si te sirve este ejemplo

    Att. Franklin Andino


    Bueno la clase completa la tengo asi
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;
    using System.Configuration;
    using System.Collections.Generic;
    
    namespace CDB
    {
        public class DbResult
        {
            public List<DataRow> DrResult { get; set; }
            public bool Result { get; set; }
            public string msg { get; set; }
            public string outputVariable { get; set; }
        }
    
        public class SPParams
        {
            public string Name { get; set; }
            public string Value { get; set; }
        }
    
        public class ConnectionDB
        {
            #region Variables
            SqlDataAdapter SqlDa;
            SqlConnection SqlCnn;
            DataTable Dt;
            #endregion
    
            public DbResult Run(string Sp, List<SPParams> Params = null)
            {
                var Result = new DbResult();
                bool output = false;
                string OutPutParam = "";
                try
                {
                    Result.Result = false;
    
                    using (SqlCnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConDB"].ConnectionString))
                    {
                        Dt = new DataTable();
                        using (SqlDa = new SqlDataAdapter(Sp, SqlCnn))
                        {
                            SqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
                            SqlDa.SelectCommand.CommandText = Sp;
                            SqlDa.SelectCommand.CommandTimeout = 0;
                            if (Params != null)
                            {
                                foreach (var Param in Params)
                                {
                                    if (!Param.Name.Contains("output_") || (Param.Name.Length > 3 && Param.Name.Substring(0, 2).Equals("o_")))
                                        SqlDa.SelectCommand.Parameters.AddWithValue("@" + Param.Name, Param.Value);
    
                                    else
                                    {
                                        output = true;
                                        OutPutParam = Param.Name;
                                        SqlDa.SelectCommand.Parameters.Add("@" + Param.Name, SqlDbType.VarChar).Direction = ParameterDirection.Output;
                                    }
                                }
                            }
    
                            SqlDa.Fill(Dt);
                        }
                        Result.Result = true;
                        Result.DrResult = lRows(Dt);
    
                        if (output)
                            Result.outputVariable = (string)SqlDa.SelectCommand.Parameters["@" + OutPutParam].Value;
    
                    }
    
                }
                catch (Exception ex)
                {
                    Result.Result = false;
                    Result.msg = ex.Message.ToString();
                }
                return Result;
            }
    
            private List<DataRow> lRows(DataTable dt)
            {
                List<DataRow> ListDr = new List<DataRow>();
                foreach (DataRow dr in dt.Rows)
                {
                    ListDr.Add(dr);
                }
                return ListDr;
            }
        }
    }
    
    espero sea de tu utilidad

    Att. Franklin Andino

    jueves, 3 de marzo de 2016 17:33
  • esta es mi clase

    private string myconsql = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ALUMNOS"].ToString();

    public bool InsertaC(Hashtable MyH)
        {

            bool vr = false;
            SqlConnection oconn = new SqlConnection(myconsql);
            try
            {
                oconn.Open();

                SqlCommand mycomman = new SqlCommand();
                mycomman.CommandText = "Sp_alumnos";
                mycomman.CommandType = CommandType.StoredProcedure;


                mycomman.Parameters.AddWithValue("@nombre", MyH["nombre"].ToString());
                mycomman.Parameters.AddWithValue("@carrera", MyH["carrera"].ToString());
                mycomman.Parameters.AddWithValue("@numcontrol", Convert.ToInt32(MyH["orden"]));
                mycomman.Connection = oconn;
                mycomman.ExecuteNonQuery();
                oconn.Close();
                vr = true;
            }
            catch (Exception )
            {
                vr = false;
            }
            return vr;
        } 

    SI LA CADENA ESTA EN WEB CONGIG, Y SI ESTA BIEN POR QUE TENGO UN DROPDOWNLIST QUE LE CARGO DATOS ASI:

    private void CargaTipodeContendor()
        {
            CLASEC MyC = new CLASEC();
            DataSet MyD = new DataSet();
            MyD = MyC.CargAs();
            if (MyD.Tables[0].Rows.Count > 0)
            {
                ddltipocontenedor.DataSource = MyD.Tables[0];
                ddlnombre.DataTextField = "nombre";
                ddlnombre.DataValueField = "nombre";
                ddlnombre.DataBind();
            }
        }

        
    jueves, 3 de marzo de 2016 17:39
  • y este uso para agregar 

      private void btnguarda_Click(object s

    ender, EventArgs e)
        {


           InsertC MyC = new InsertC();
           Hashtable MyH = new Hashtable();
           try
           {

                MyH.Add("nombre", ddlnombre.SelectedValue);
                MyH.Add("carrera", txtcarr.Text);
                MyH.Add("numcontrol", txtnum.Text);

                if( MyC.InsertaC(MyH) == true)
                {
                Response.Write("<script>alert('Data Inserted Successfully!')</script>");
                }
                else
                {
                   Response.Write("Error");
                }
                }
                catch (Exception ex)
                {
               Response.Write(ex);
                }

    AQUI AL DAR CLICK EN GUARDAR NO ME AGREGA NADA, CUAL SERIA EL ERROR????????

    y en una clase tengo mi  "InsertC" asi:

     public bool InsertaC(Hashtable MyH)
        {

            bool vr = false;
            SqlConnection oconn = new SqlConnection(myconsql);
            try
            {
                oconn.Open();

                SqlCommand mycomman = new SqlCommand();
                mycomman.CommandText = "Sp_alumnos";
                mycomman.CommandType = CommandType.StoredProcedure;


                mycomman.Parameters.AddWithValue("@nombre", MyH["nombre"].ToString());
                mycomman.Parameters.AddWithValue("@carrera", MyH["carrera"].ToString());
                mycomman.Parameters.AddWithValue("@numcontrol", Convert.ToInt32(MyH["orden"]));
                mycomman.Connection = oconn;
                mycomman.ExecuteNonQuery();
                oconn.Close();
                vr = true;
            }
            catch (Exception )
            {
                vr = false;
            }
            return vr;
        } 

    tal vez en la clase o en el boton este algo mal?

    jueves, 3 de marzo de 2016 17:40
  • ¿Lograste resolverlo? y si es así no se te olvide compartir cual era el error o como lo solucionaste.
    viernes, 4 de marzo de 2016 1:26
  • hola

    algunas recomendaciones

    - no uses un hastable, no es buena idea,crea una clase como ser

    public class Alumno
    {
        public string nombre{get;set;}
        public string carrera{get;set;}
        public int numcontrol {get;set;}
    
    }

    entonces defines

    public bool InsertaC(Alumno entity) { ....

    - la base de datos esta integrada al VS ? o sea puedes verla en el Solution Explorer, porque si es asi recuerda que al ejecutas se crea un copia en el \bin\Debug por lo que al volver a ejecutar se pierden los datos anteriores

    puede que este insertando pero si detienes la aplicacion para verificar los pierdas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 4 de marzo de 2016 10:49