Principales respuestas
Ejecutar un stored procedure (procedimiento almacenado) de SQL Server 2012 desde un button C#.NET

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
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- Marcado como respuesta Karen MalagónModerator lunes, 11 de enero de 2016 19:10
-
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
- Marcado como respuesta Karen MalagónModerator lunes, 11 de enero de 2016 19:10
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(); }
-
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- Marcado como respuesta Karen MalagónModerator lunes, 11 de enero de 2016 19:10
-
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
- Marcado como respuesta Karen MalagónModerator lunes, 11 de enero de 2016 19:10