Fecha en procedimiento almacenado.

15/04/2007 - 07:59 por Tomas | Informe spam
Hola,

Quiero pasar una fecha a un parametro de un procedimiento almacenado, como
ejemplo, lo hago de la siguiente forma:

command.Parameters.Add("@Fecha", SqlDbType.SmallDateTime).Value =
Fecha.ToShortDateString();

Donde Fecha es un objeto del tipo System.DateTime y command un objeto del
tipo System.Data.SqlClient.SqlCommand.

No hay error al compilar, pero al ejecutarse, devuelve un mensaje de error:
"Linea 1: sintaxis incorrecta cerca de 'NombreProcedimiento'. La base de
datos es SQL Server 2000.

¿Alguien me puede dar una pista de la sintaxis correcta para pasar una fecha
a un parametro de un procedimiento almacenado?.

Gracias por anticipado.

Tomas.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
15/04/2007 - 08:28 | Informe spam
"Tomas" wrote in message
news:
Quiero pasar una fecha a un parametro de un procedimiento almacenado, como
ejemplo, lo hago de la siguiente forma:

command.Parameters.Add("@Fecha", SqlDbType.SmallDateTime).Value =
Fecha.ToShortDateString();

Donde Fecha es un objeto del tipo System.DateTime y command un objeto del
tipo System.Data.SqlClient.SqlCommand.

No hay error al compilar, pero al ejecutarse, devuelve un mensaje de
error: "Linea 1: sintaxis incorrecta cerca de 'NombreProcedimiento'. La
base de datos es SQL Server 2000.

¿Alguien me puede dar una pista de la sintaxis correcta para pasar una
fecha a un parametro de un procedimiento almacenado?.



El parámetro es de tipo fecha, pero le estás pasando un string:
Fecha.ToShortDateString();
Si declaras un parámetro del tipo SqlDbType.SmallDateTime, tienes que
pasarle un valor de tipo fecha para que funcione correctamete:

command.Parameters.Add("@Fecha", SqlDbType.SmallDateTime).Value=Fecha;

O bien, si lo quieres más breve:

command.Parameters.AddWithValue("@Fecha", Fecha);

Donde la variable Fecha tiene que ser, claro está, de tipo DateTime.
Respuesta Responder a este mensaje
#2 Tomas
15/04/2007 - 19:21 | Informe spam
Pues algo no estoy haciendo bien porque el procedimiento almacenado lo tengo
declarado asi:

CREATE PROCEDURE dbo.NombreProcedimiento @Fecha smalldatetime
AS
(resto de sentencias ...)

el parametro en el programa se lo paso asi:

command.Parameters.Add("@Fecha",
System::Data::SqlDbType::SmallDateTime)->Value = Fecha;

El objeto Fecha es del tipo System.DateTime.
El objeto command es del tipo System.Data.SqlClient.SqlCommand.

Y me muestra un mensaje de error: "Linea 1: sintaxis incorrecta cerca de
'NombreProcedimiento'.

Si llamo al procedimiento almacenado manualmente, pasandole los valores por
la pantalla del asistente, funciona sin problemas.

Sospecho que debe haber alguna diferencia de interpretacion entre el tipo
DateTime del programa y el tipo smalldatetime de SQL2000.

¿Alguien tiene algun ejemplo que funcione manejando fechas?.

Gracias por anticipado.

Tomas.
Respuesta Responder a este mensaje
#3 Alberto Poblacion
15/04/2007 - 20:33 | Informe spam
"Tomas" wrote in message
news:
Y me muestra un mensaje de error: "Linea 1: sintaxis incorrecta cerca de
'NombreProcedimiento'.



¿No se te habrá olvidado poner
command.CommadType=CommandType.StoredProcedure?



Sospecho que debe haber alguna diferencia de interpretacion entre el tipo
DateTime del programa y el tipo smalldatetime de SQL2000.



No, seguro que no. Lo he hecho docenas de veces y son perfectamente
compatibles.
Respuesta Responder a este mensaje
#4 Tomas
16/04/2007 - 09:23 | Informe spam
¿No se te habrá olvidado poner


command.CommadType=CommandType.StoredProcedure?



Efectivamente, lo habia visto pero pense que no hacia falta porque le
presumia de inteligencia a command ya que le estaba pasando parametros al
comando y presumia que por omision estableceria el tipo a procedimiento
almacenado, pero veo que no es asi.

Al asignarlo en el programa ha dejado de mostrar el mensaje de error.

Gracias.

Tomas.
Respuesta Responder a este mensaje
#5 Alberto Poblacion
16/04/2007 - 09:36 | Informe spam
"Tomas" wrote in message
news:%23c5Vng$
pense que no hacia falta porque le presumia de inteligencia a command ya
que le estaba pasando parametros al comando y presumia que por omision
estableceria el tipo a procedimiento almacenado, pero veo que no es asi.



Efectivamente, el hecho de pasar parámetros no indica necesariamente que
se trate de un procedimiento almacenado. De hecho, se pueden parametrizar
las sentencias ordinarias:

comando.CommandText="Select * from MiTabla Where Campo=@Valor";
comando.Parameters.AddWithValue("@Valor", valor);
...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida