Foros del Web » Programación para mayores de 30 ;) » .NET »

utilizar funciones sql server en visual c#

Estas en el tema de utilizar funciones sql server en visual c# en el foro de .NET en Foros del Web. Buenas, tengo una funcion definida por el usuario en mi sql server, y estoy programando en visual c#, ahy alguna forma que dsd el visual ...
  #1 (permalink)  
Antiguo 03/11/2005, 03:22
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
utilizar funciones sql server en visual c#

Buenas,

tengo una funcion definida por el usuario en mi sql server, y estoy programando en visual c#, ahy alguna forma que dsd el visual c# pueda llamar a esa funcion?¿, ya q lo he probado por el exploarador de soluciones y nada :(

Y tb he intentado cosas como int i=dbo.ID; ya que la funcion devuleve un id

GRACIAS
  #2 (permalink)  
Antiguo 03/11/2005, 09:55
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Si tienes una funcion en SQL Server obviamente para llamarla la tienes que hacer con tus objetos Data.SqlClient y usar por ejemplo un reader donde llames a la funcion, recuerda que los objetos de tun BD no son los mismos que los del lenguaje.

O si tengo mala la idea por favor explicate un poco mas..

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 04/11/2005, 00:56
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Buenas Rootk, pues no me ha quedado claro.

Me vuelvo a explicar tengo "una funcion definida por el usuario" en imi BD, esta lo único que hace es devovelrme un identificador.

Pues bien en mi progrma(visual c#) tengo que intentar llamar a esa función para que me devuelva ese identificador(q es un entero) antes de llamar a la función insertar.
Podrias poner un simple ejemplo?¿, o alguna página de referencia(asi me busco yo la vida y no lo das todo hecho) :D

Muchas gracias de nuevo
  #4 (permalink)  
Antiguo 08/11/2005, 05:25
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Buenas de nuevo, aqui sigo con el tema..., si no hay forma de llamarlas(no se como se hace) una opcion válida seria copiar la funcion que tengo en el sqlserver y ponerla en mi programa no?¿

La funcion en cuestion es:

CREATE FUNCTION [dbo].[IdECS] ()
RETURNS int AS
BEGIN
Declare @trobat int
Declare @i int
Select @trobat=0
Select @i=1
while (@trobat=0)
if (SELECT COUNT (ID_EC) FROM IRIS_ECS WHERE ID_EC=@i)>0
select @i=@i+1
else
select @trobat=1
RETURN (@i)
END


Pero no se como pasar: if (SELECT COUNT (ID_EC) FROM IRIS_ECS WHERE ID_EC=@i)>0
a visual c#

GRACIAS

Última edición por kakarot; 08/11/2005 a las 05:46
  #5 (permalink)  
Antiguo 08/11/2005, 09:42
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Necesitas crear tu stringbuilder y solamente hacer la llamada a T-SQL

qry.Append("SELECT IdECS()");

Pero veo que esta funcion recibe valores, pero no se los pasas como argumento?

Bueno, si es necesario tambien puedes hacer algo asi:

qry.Append("DECLARE @variable int; SELECT bla bla bla");


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 08/11/2005, 10:03
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
seria mejor si todo lo que sea T-SQL tratar de cargarselo al Servidor SQL...
y que solo te regrese las tablas o valores resultados...podria hacerlo creando stored procedures... solo como sugerencia...
  #7 (permalink)  
Antiguo 09/11/2005, 01:46
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Buenas de nuevo

Vamos por partes q me lio

He creado un proceso almacenado igual q el de la funcion:

CREATE PROCEDURE [dbo].[IdEC]
as
Declare @trobat int
Declare @i int
Select @trobat=0
Select @i=1
while (@trobat=0)
if (SELECT COUNT (ID_EC) FROM IRIS_ECS WHERE ID_EC=@i)>0
select @i=@i+1
else
select @trobat=1
RETURN (@i)

GO

Y al final me ha añadido la palabra "GO", he comprobado la sintaxis y no ha dado error, por lo q debe estar bien

Ahora q tendria q llamar dsd mi visual c# a ese procedimiento por lo q hago:

public int idEC()
{
SqlCommand sqlcmd;
SqlConnection sqlcon;
SqlDataReader sqlread;
string conexion=("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Telematica;Data Source=UP672291");
//Se crea la conexion
sqlcon= new SqlConnection (conexion);

//Llamamos al metodo call
sqlcmd= new SqlCommand("{? = CALL idEC()}",sqlcon);
sqlprm =sqlcmd.Parameters.Add("@RETURN_VALUE",System.Data .SqlDbType.Int);
sqlprm.Direction = ParameterDirection.ReturnValue;
sqlcon.Open();
sqlread = sqlcmd.ExecuteReader();
sqlread.Read();
int i=sqlread.GetInt32(0);
return i;
}//idEc

Pero me da error en la linea: sqlread = sqlcmd.ExecuteReader();, supngo q debe ser al hacer el:sqlcmd= new SqlCommand("{? = CALL idEC()}",sqlcon); pero se llama de esa forma no?¿, mi proceso si llama idEC



GRACIAS por vuestra paciencia

Última edición por kakarot; 09/11/2005 a las 03:20
  #8 (permalink)  
Antiguo 09/11/2005, 08:43
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
no tienes en tu procedure ningun parametro de salida... si lo tuvieras apareceria algo como

create procedure miproceso
parametrosalida int output
as

....




te recomiendo que ejecutes con ejecuta escalar en lugar de reader...reader utilizalo cuando el sp solo te regrese un select con registros leidos

ejemplo.
Convert.ToInt32(ComSQL.ExecuteScalar())
  #9 (permalink)  
Antiguo 10/11/2005, 00:59
 
Fecha de Ingreso: diciembre-2003
Mensajes: 288
Antigüedad: 20 años, 4 meses
Puntos: 0
Pero andres si q me retorna un valor, concretamete un int, entonces la sentencia:
sqlprm =sqlcmd.Parameters.Add("@RETURN_VALUE",System.Data .SqlDbType.Int);
sqlprm.Direction = ParameterDirection.ReturnValue;

No serian lógicas?¿
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:58.