Error al convertir varchar a datetime al ejecutar el procedimiento almacenado desde el código

c# dapper sql sql-server

Pregunta

Desde mi aplicación C # estoy llamando a un procedimiento almacenado usando Dapper:

return conn.Query<MyList>("check_data", new { dataToCheck }, commandType: CommandType.StoredProcedure);

dataToCheck es una DataTable porque check_data acepta un TVP . Este tipo de tabla tiene 2 columnas (from_date varchar (20), to_date varchar (20)) y se basa en la siguiente clase.

public class DataToCheckType
{
    public DateTime? from_date {get; set;}
    public DateTime? to_date {get; set;}
}

Dapper luego envía lo siguiente a SQL Server:

declare @p1 dbo.CheckDataType
insert into @p1 values('2017-04-19 00:00:00','2017-04-19 00:00:00')

exec check_data @dataToCheck=@p1

El SP en sí es simple. Llama a una función que crea una instrucción SQL que luego se ejecuta:

DECLARE @sql nvarchar(max) = dbo.GetSql(@dataToCheck);

DECLARE @results TABLE (Id int);
INSERT INTO @results EXECUTE(@sql);

La función GetSql comienza así:

DECLARE @fromDate datetime;
DECLARE @toDate datetime;

SELECT 
    @fromDate = CONVERT(datetime, from_date, 120),
    @toDate = CONVERT(datetime, to_date, 120),
FROM 
    @dataToCheck;

Y continúa construyendo la declaración SQL como se esperaba. Al ejecutar el SP de T-SQL todo funciona bien.

Sin embargo, cuando ejecuto el mismo código, obtengo el siguiente error:

check_data: 241 La conversión falló al convertir la fecha y / o la hora de la cadena de caracteres

¿Por qué el SP trabaja en T-SQL pero no cuando lo llama desde el código? ¿Qué pasa con las fechas?

Respuesta aceptada

El problema se resolvió cambiando las columnas en el tipo de tabla de varchar(20) hasta la date .



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué