none
Ejecutar un stored procedure (procedimiento almacenado) de SQL Server 2012 desde un button C#.NET RRS feed

  • Pregunta


  • ***SOLUCIONADO***

    Gracias por las respuestas. Al final lo resolví siguiendo un ejemplo de esta página:

    https://uitoarellanojosehugoarellanoperez.wordpress.com/category/ejecutar-store-procedure-desde-c/

    El código quedó así:

    protected void Button1_Click(object sender, EventArgs e)
            {
                        // Ejecutar Stored Procedure
                        string cadenaconexion = @"Data Source=NOMBREDEPC\SQLEXPRESS;Initial Catalog=PrestoCash;Integrated Security=True";
                        
                        SqlConnection LaConexion = null;
                        
                        SqlTransaction LaTransaccion = null;
                            {
                            //seguimos con la conexion
                            LaConexion = new SqlConnection();
                            //asignamos a la conexión la cadena de conexión que declaramos anteriormente
                            LaConexion.ConnectionString = cadenaconexion;
                            //se abre la conexión
                            LaConexion.Open();
                            //se inicia la transacción
                            LaTransaccion = LaConexion.BeginTransaction(System.Data.IsolationLevel.Serializable);
                            //especificamos el nombre del Procedimiento Almacenado
                            SqlCommand comando = new SqlCommand("SP_Cuota", LaConexion, LaTransaccion);
                            //se indica al tipo de comando que es de tipo procedimiento almacenado
                            comando.CommandType = CommandType.StoredProcedure;
                            //se limpian los parámetros
                            comando.Parameters.Clear();
                            //comenzamos a mandar cada uno de los parámetros, deben de enviarse en el
                            comando.Parameters.AddWithValue("@idCredito", Convert.ToInt32(hidIDCredito.Value));
                            //executamos la consulta
                            comando.ExecuteNonQuery();
    
                            LaTransaccion.Commit();
                            //cerramos la conexión
                            LaConexion.Close();
                            }
                    }
                }
            }


    Estimados,

    Tengo un procedimiento almacenado que requiere de un sólo parámetro para ejecutarse (@idcredito) en SQL Server 2012. Ya está testeado en el mismo SQL y funciona a la perfección.

    El Stored Procedure "SP_Cuota" es el siguiente:

    USE PrestoCash
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE SP_Cuota
    
    	@p1 int = 2, 
    	@p2 int = 3,
    	@dia date = null, 
    	@idcredito int,
    	@diadesemana int= null,
    	@totalcuotas int= null,
    	@sumocuota int = 1,
    	@importe int= null,
    	@diavto date = null
    AS
    BEGIN
    	set @dia = (Select PrimerVencimiento from Credito where IDCredito= @idcredito)
    	set @diadesemana =  (select DATEPART(weekday,@dia))
    	set @totalcuotas = (Select CantidadCuotas from Credito where IDCredito = @idcredito)
    	set @importe = (Select ValorTotalCuota from Credito where IDCredito = @idcredito)
    	set @diavto = @dia
    	while @sumocuota <= @totalcuotas 
    		BEGIN
    			insert into Cuotas(IDCredito, Fecha, Cuota, Importe)
    			values (@idcredito, @diavto, @sumocuota,@importe)
    			set @diadesemana =  (select DATEPART(weekday,@diavto))
    			set @diavto = DATEADD(day,IIF(@diadesemana = 4, 3, 2),@diavto)
    			set @sumocuota = @sumocuota + 1
    		END
    END


    Ahora bien, quiero ejecutarlo en a través de un button en la aplicación. El evento es el siguiente:

    protected void Button1_Click(object sender, EventArgs e)
    {
    	using (SqlConnection con = new SqlConnection("context connection=true"))
            	{
                    	using (SqlCommand cmd = new SqlCommand("SP_Cuota", con))
                            {
                                cmd.CommandType = CommandType.StoredProcedure;
                                cmd.Parameters.Add("@idcredito", SqlDbType.Int).Value = Convert.ToInt32(hidIDCredito.Value);
                                con.Open();
                                cmd.ExecuteNonQuery();
                            }
                    }
    }


    la línea 

    using (SqlConnection con = new SqlConnection("context connection=true"))

    la saqué de la página www.connectionstrings.com

    La verdad es que desconozco el método correcto escribir el evento. Sé que entre esos paréntesis debe ir el "connection string", y lo único que encuentro en mi aplicación con esa descripción es lo siguiente:

    Data Source=NOMBREDEMIPC\SQLEXPRESS;Initial Catalog=PrestoCash;Integrated Security=True

    Probé insertar esa línea dentro de los paréntesis, entre comillas, pero el botón no hace nada.

    Qué es lo que estoy haciendo mal??

    Desde ya, muchas gracias


    • Editado denis.soto jueves, 7 de enero de 2016 0:51
    miércoles, 6 de enero de 2016 19:44

Respuestas

  • hola

    >>Probé insertar esa línea dentro de los paréntesis, entre comillas, pero el botón no hace nada.

    el codigo no lo defines dentro de un bloque try..catch ? porque puede que se genre un exception si es que no se conecta a la db

    Entiendo que puedes conectarte a a db usando el Management Studio, no ? si es asi los datos que usas en el connection string son los que usas en el codigo

    podrias testear la conexion creando un archivo de extendion .udl, para esto crea un archivo .txt y le cambias la extension, ejecutas y completas los datos del wizard para poder testear si te conectas

    recuerda que si te conectas remoto debes habilitar esto en Sql server

    Enable Remote Connection on SQL Server 2008 Express

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 6 de enero de 2016 20:22
  • Cadena de conexión con autenticación de Windows

    Para conectar a una base de datos de SQL Server con autenticación de Windows, la cadena de conexión será:

    Data Source = ServidorSQL; Initial Catalog = BaseDatos; Integrated Security = True

     

    Cadena de conexión con autenticación de SQL Server

    Para conectar a una base de datos de SQL Server usando autenticación del propio SQL Server, la cadena de conexión será:

    data source = ServidorSQL; initial catalog = BaseDatos; user id = Usuario; password = Contraseña

     

    Indicar una base de datos que está en un servidor "remoto"

    Para acceder a una base de datos que está en un servidor remoto, es decir en otro equipo, debemos usar cualquiera de las dos cadenas de conexión que hemos visto antes, aunque lo normal será que se use la segunda en la que se indica el nombre del usuario y la contraseña.
    Esto se suele usar cuando estamos en una página Web o bien si queremos acceder desde una aplicación de escritorio (Windows.Forms), pero la base de datos no está en nuestro equipo.
    El código podría ser el siguiente, y puedes usar una dirección IP o el nombre de un dominio (DNS) para indicar el nombre del servidor de SQL Server:

    data source = ServidorSQL; initial catalog = BaseDatos; user id = Usuario; password = Contraseña

     

     Por si querias saber sobres las cadenas de conexion

    miércoles, 6 de enero de 2016 20:50

Todas las respuestas

  • Crea una clase y ahi defines el procedimiento

    Despues en la clese principal de tu aplicacion creas un objeto de tu clase 

    ejemplo 

    MiClase objeto = new MiClase();

    despues desde el evento click de boton escribes  el nombre del objeto y llmas al metodo que contiene el procedimiento almacenado 

    Ejemplo

      private void MiBoton_Click(object sender,EventArgs e)
            {
               objeto.NombreDelMetodo();
            }

    miércoles, 6 de enero de 2016 20:06
  • hola

    >>Probé insertar esa línea dentro de los paréntesis, entre comillas, pero el botón no hace nada.

    el codigo no lo defines dentro de un bloque try..catch ? porque puede que se genre un exception si es que no se conecta a la db

    Entiendo que puedes conectarte a a db usando el Management Studio, no ? si es asi los datos que usas en el connection string son los que usas en el codigo

    podrias testear la conexion creando un archivo de extendion .udl, para esto crea un archivo .txt y le cambias la extension, ejecutas y completas los datos del wizard para poder testear si te conectas

    recuerda que si te conectas remoto debes habilitar esto en Sql server

    Enable Remote Connection on SQL Server 2008 Express

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 6 de enero de 2016 20:22
  • Cadena de conexión con autenticación de Windows

    Para conectar a una base de datos de SQL Server con autenticación de Windows, la cadena de conexión será:

    Data Source = ServidorSQL; Initial Catalog = BaseDatos; Integrated Security = True

     

    Cadena de conexión con autenticación de SQL Server

    Para conectar a una base de datos de SQL Server usando autenticación del propio SQL Server, la cadena de conexión será:

    data source = ServidorSQL; initial catalog = BaseDatos; user id = Usuario; password = Contraseña

     

    Indicar una base de datos que está en un servidor "remoto"

    Para acceder a una base de datos que está en un servidor remoto, es decir en otro equipo, debemos usar cualquiera de las dos cadenas de conexión que hemos visto antes, aunque lo normal será que se use la segunda en la que se indica el nombre del usuario y la contraseña.
    Esto se suele usar cuando estamos en una página Web o bien si queremos acceder desde una aplicación de escritorio (Windows.Forms), pero la base de datos no está en nuestro equipo.
    El código podría ser el siguiente, y puedes usar una dirección IP o el nombre de un dominio (DNS) para indicar el nombre del servidor de SQL Server:

    data source = ServidorSQL; initial catalog = BaseDatos; user id = Usuario; password = Contraseña

     

     Por si querias saber sobres las cadenas de conexion

    miércoles, 6 de enero de 2016 20:50